MySql查询语句的顺序
MySql数据库应该是当前大家日常应用比较多的一个关系型数据库,今天我们来说一下MySql查询语句的顺序。
-- 查询购买商品数量大于1的用户
SELECT * FOM user a LEFT JOIN order b ON a.user_id = b.user_id WHERE a.user_id = '' GROUP BY b.order HAVING count(*)>1;
这是一个比较简单的Sql,那么大家知道这个Sql的执行顺序吗?他的顺序优先级是这样的:
1.from 表1
2.on <join条件>
3.<join类型>join 表2
4.where <where条件>
5.group by <字段>
6.[fun(字段名)]
7.having <having条件>
8.Select
9.distinct 字段名1,字段名2
10.order by <排序字段>
11.limit <起始偏移量,行数>
首先MySql会根据from查询对应表,然后根据on筛选条件,筛选后join形成临时表,然后执行where去筛选临时表,然后使用group by分组。
MySql索引失效
MySql会在什么情况下导致索引失效呢?以下有这几种方式会导致索引失效。
1.存在类型转换会导致索引失效。
2.使用函数会导致索引失效。
3.使用!= 或者<>会导致索引失效。
4.使用is not null会导致索引失效。
5.or前后存在非索引字段会导致索引失效。
6.like模糊查询以%开头会导致索引失效。
7.不符合最左匹配原则会导致索引失效。
MySql分库分表策略
MySql分库分表策略包括垂直拆分和水平拆分两种,垂直拆分根据业务拆分为不同的库,以解决表与表之间的io竞争,如订单库、用户库等。水平拆分是将同一个表的数据拆分到不同的库中,来解决单表数据量的增长导致的数据压力问题。
MySql排序的一个问题(工作中发现)
MySql主键为Varchar类型,当主键为1-10,排序会不按顺序排序,原因是由于字符串排序导致顺序不对。
MySql事务的属性(ACID)
原子性
一致性
隔离性
持久性
MySql的存储引擎
常见的存储引擎有InnoDB、MyISAM、Memory、NDB。
MyISAM和InnoDB的区别
1.MyISAM不支持事务,InnoDB支持事务。
2.InnoDB支持外键,MyISAM不支持外键。
3.InnoDB是聚簇索引,MyISAM是非聚簇索引。
补充:什么是聚簇索引,什么是非聚簇索引?
聚簇索引:是将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据。
非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置。
4.InnoDB最小的锁粒度是行锁,MyISAM最小的锁粒度是表锁。
MySQL索引
提到索引,当去学习的时候,提出几个疑问?
1.什么是索引?
2.使用索引的优缺点?
3.索引的底层原理是什么?
那么我们接下来学习一下
1.什么是索引?
MYSQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构,所以说索引的本质是:数据结构索引的目的在于提高查询效率,可以类比图书的目录,可以简单的理解为:排好序的用于快速查找的数据结构
2.使用索引的优缺点?
索引优势
提高数据检索效率,降低数据库IO成本;
降低数据排序的成本,降低CPU的消耗;
索引劣势
索引也是一张表,保存了主键和索引字段,并指向实体表的记录,所以也需要占用内存。
虽然索引大大提高了查询速度,同时却会 降低更新表的速度,如对表进行INSERT、UPDATE、DELETE。
3.索引的底层原理是什么?
B+树
1.B+树的每个非叶子节点存储都是数据索引,而不是数据本身,那么每块数据存储的索引更多,加载到内存,查询也更多,也降低了IO的读写次数。
2.B+树叶子节点有指向下一个叶子节点的指针,叶子节点类似于一个单链表,可以增加了区间的访问性,提高了范围查询,而B树的范围查询想对较差。
3.B+树中的B是Balance的缩写,全称多路平衡查找树。
欢迎各位大佬沟通讨论。