1聚集索引与非聚集索引
聚集索引:b+树上面有数据
非聚集索引:b+树上面没有数据,只有引用地址
2.二级索引(非主键构成的索引,叶子节点数据为主键)
回表:以非主键建立索引,会形成非聚集索引,查询该字段,会查询到所涉及的主键,然后根据主键查询b+树。
3覆盖索引:不需要回表(二级索引查到的叶子节点的数据,就是需要的数据)
4联合索引:多个字段一起构成索引
最左前缀原则:会依次按照name,age,id的顺序来构造索引,查询时,必须带上最左字段(a)(a,b),(a,b,c)否则会全表扫描。
联合索引相比单列索引的优点:
1.减少开销,每次建立索引都会浪费开销
2.更容易形成覆盖索引
3.效率更高
5.索引下推
条件:2级索引,范围查询
一次性回表
非索引下推
6.索引的优缺点
7. 索引优化
Explain:用于查询sql的执行计划
索引失效的情况(破坏了索引的有序性)
1.不符合最左前缀原则。
2. 索引列上有函数。
3.范围之后全失效
4.!= , or ,空值
查看possible_key,如果有索引,可以强制使用索引,看行数是否减少了(最主要的是范围查询)
5.like%写最右 like "a%" ,首字母必须漏出来 ,
%amy%用覆盖索引还是不行,用elastic search 来代替。
6.字符串不要忘记双引号
7.覆盖索引不写*
8.大范围查询改为多次小范围查询
8. trace工具
9.sql优化
1.不写select *
2.小表驱动大表(实际先查询的小表,减少了查询范围)
3.用连接查询代替子查询,有时有用.(实际上就是先查询小范围的表,然后用小范围的表的条件作为大范围表的索引来进行快速查询。
4. group by效率变低,可以对group by 字段建立索引
5.批量插入
6.使用limit
7.union all 代替union(可以减少重复排查)
8.join表不要过多,尽量单表查询