mysql 索引
一、索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,SQL的主流索引结构有B+树以及Hash结构,聚集索引以及非聚集索引用的是B+树索引
1、聚集(clustered)索引:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。
索引的叶子节点就是对应的数据节点
2、非聚集(unclustered)索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。
非聚集索引叶节点仍然是索引节点
1、explain 查看索引使用情况
using index:使用索引
using where:未使用索引,回表查询
using filesort:未使用索引,order by 影响了
2、小表驱动大表
select .... where 小表.x=大表.x
3、复合索引,不要跨列或者无序使用;尽量使用全索引匹配;不要在索引上进行任何操作(计算、函数、类型转换);复合索引不能使用不等于(!=、<>)或者 is null(is not null),否则右侧全部失效;尽量使用索引覆盖;like尽量不要%开头
索引覆盖:select 查询的列正好是包括在索引里,不需要回表查询了(using where)
如果必须使用like '%x%',可以使用索引覆盖补救 select tname from teacher where tname like '%x%'
尽量不要使用类型转换(显示、隐式);尽量不要使用or
4、exist 和in
如果主查询的数据集大,则使用in
如果子查询的数据集大,则用exist
参考:https://www.cnblogs.com/madashu/p/12508416.html


浙公网安备 33010602011771号