写在前面:
网上针对索引分类,各种定义混乱,现在针对索引分类做以下整理。不足的地方,欢迎大家指正。
索引分类:
1. B+Tree索引
相关定义及原理
B-Tree树索引通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离都是相同。
B-Tree树索引能够加快访问速度,因存储引擎不必进行全表扫描获取数据,而是从索引的根节点开始搜索。根节点的槽中存放了指向子节点的指针,存储引擎根据这些指针向下层查找。 通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,这些指针实际上定义了子节点页中值得上限和下限。最终存储引擎要么找到对应的值,要么该记录不存在。
树的深度跟表的大小直接相关。
可使用B-tree索引的类型
适用类型:全键值、键值范围、键前缀【只适用最左前缀,这是Mysql相关特性,甚至和版本有关】
因为索引树中节点是有序的,故可按键值查找、ORDER BY顺序查找、
B-Tree索引限制
- 没有按照索引的最左前缀查找
- 不能跳过索引的列
- 某个列范围查找,则右边所有列都无法使用索引查找。如下方案例:
WHERE name='zhangsan' AND city LIKE 'shen%' AND `date` ='2019-12-07'
网友评论