mysql B-tree索引原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013181912/article/details/79045135

B-tree索引的值都是按照顺序存储的,并且每一个叶子页根的距离相同。
下图展示了B-tree原理
这里写图片描述
- B-tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点,开始进行搜素。根节点存放了指向子节点的指针,存储引擎根据这些指针向下查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,这些指针实际上定义了子节点页中的值得上限和下限。最终存储引擎要么是找到对应的值要么记录不存在

  • 叶子节点指向的是被索引的数据,而不是其他的节点页,根节点和叶子节点之间可能有很多层节点页。树的深度和表的大小直接相关

  • B-tree对所以列时顺序组织存储的,所以很适合查找范围数据

B-tree索引适用于全键值、键值范围或键前缀查找(键前缀只适用最左前缀查找)
- B-tree索引适用于全键值、键值范围或键前缀查找(键前缀只适用最左前缀查找)
- 全值匹配:全值匹配指的是和索引中的所有列进行匹配
- 匹配最左前缀:从左向右依次匹配,不能跳过左边的
- 匹配列前缀:也可以匹配某一列的值得开头部分
- 匹配范围值:因为b-tree是顺序存储的所以适合范围匹配
- 精确匹配某一列并范围匹配另一列
B-tree索引的限制:
- 如果不是按照索引的最左列开始查找,则无法使用索引
- 不能跳过索引中的列
- 如果查询中有某个列的范围查询,则其右边所有的列都无法使用索引优化查找

摘自《高性能mysql》

猜你喜欢

转载自blog.csdn.net/u013181912/article/details/79045135