最左匹配原则
1、先定位该sql的查询条件,有哪些,那些是等值的,那些是范围的条件。
2、等值的条件去命中索引最左边的一个字段,然后依次从左往右命中,范围的放在最后。
分析讲解
1、mysql的索引分为聚簇索引和非聚簇索引,mysql的表是聚集索引组织表。
聚集规则是:有主键则定义主键索引为聚集索引;没有主键则选第一个不允许为NULL的唯一索引;还没有就使用innodb的内置rowid为聚集索引。
非聚集索引也称为二级索引,或者辅助索引。
2、mysql的索引无论是聚集索引还是非聚集索引,都是B+树结构。聚集索引的叶子节点存放的是数据,非聚集索引的叶子节点存放的是非聚集索引的key和主键值。B+树的高度为索引的高度。
3、索引的高度
聚集索引的高度决定了根据主键取数据的理论IO次数。根据非聚集索引读取数据的理论IO次数还要加上访问聚集索引的IO次数总和。实际上可能要不了这么多IO。因为索引的分支节点所在的Page因为多次读取会在mysql内存里cache住。
mysql的一个block大小默认是16K,可以根据索引列的长度粗略估算索引的高度。
sql优化依据
SQL语句中的where条件,使用以上的提取规则,最终都会被提取到Index Key (First Key & Last Key),Index Filter与Table Filter之中。
Index First Key,只是用来定位索引的起始范围,因此只在索引第一次Search Path(沿着索引B+树的根节点一直遍历,到索引正确的叶节点位置)时使用,一次判断即可;
<