定义描述
最左原则定义:
最左优先,以最左边的为起点任何连续的索引都能匹配上。
同时遇到范围查询例如 >、<、between、like就会停止匹配。
简单解释:
如果我们创建只有单个字段的索引,那么只要限制条件中出现了该字段就会使用该条索引
如果建立联合索引,那从你第一个对应索引中最左边的字段就要开始使用该索引了
值得提一下的是在MySQL5.7中对索引支持全排列以至于不再遵循最左原则,这是值得考究的
从左到右如果出现不连续或者范围查询则都会只使用部分索引
原理解析
我们都知道索引的底层是B+树,我们就先来聊一聊B树
B树是一种平衡多路查找树,我们就从最简单的平衡二叉树聊起
平衡二叉树的特点如下:
(1)非叶子节点最多拥有两个子节点;
(2)非叶子节值大于左边子节点、小于右边子节点;
(3)树的左右两边的层级数相差不会大于1;
(4)没有值相等重复的节点;
而B树平衡多路查找树就是把二叉树复杂化,不过还是遵顼以上的特点
无非是每个节点存放的数据更多了但是都遵循左小右大的规律
而B+树作为B树的plus版本,则是将非叶子节点都用来作为数据索引
从而使树的非叶子节点存储的关键字大大增加,还具有以下特点:
(1)B+树的层级更少:
相较于B树B+每个非叶子节点存储的关键字数更多,树的层级更少所以查询数据更快;
(2)B+树查询速度更稳定:
B+所有关键字数据地址都存在叶子节点上,
所以每次查找的次数都相同所以查询速度要比B树更稳定;
(3)B+树天然具备排序功能:
B+树所有的叶子节点数据构成了一个有序链表,
在查询大小区间的数据时候更方便,数据紧密性很高,缓存的命中率也会比B树高。
(4)B+树全节点遍历更快:
B+树遍历整棵树只需要遍历所有的叶子节点即可,
而不需要像B树一样需要对每一层进行遍历,这有利于数据库做全表扫描。
B树相对于B+树的优点是,如果经常访问的数据离根节点很近,
而B树的非叶子节点本身存有关键字其数据的地址,所以这种数据检索的时候会要比B+树快
除了这两种B树还有B*树,这就更少接触到了,如果有兴趣可以自行去了解
说了这些,我们就可以知道B+树都使用过数据索引找到的数据,而如果不连续
则不存在数据索引来指导找到地址,从而都满足从左到右的规律,也就是最左匹配原则了