B-Tree索引
一.概念
B-Tree(多路搜索树,并不是二叉的),是一种常见的数据结构.使用B-Tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.这个数据结构一般用于数据库的索引,综合效率较高.
二.二叉树和平衡二叉树
了解二叉树和平衡二叉树
引用: B-Tree和B+Tree详解
https://blog.csdn.net/Hubery_James/article/details/80565137
引用:快速理解平衡二叉树、B-tree、B+tree、B*tree
https://blog.csdn.net/jacke121/article/details/78268602
三.B-Tree索引的查询类型
B-Tree索引适用于全键值,键值范围或者键前缀查找(只适用于根据最做前缀的查找)
1.全值匹配
是和索引中的所有列进行匹配
2.匹配最左前缀
只使用索引的第一列
3.匹配列前缀
也可以匹配某一列的值的开头部分
4.匹配范围值
匹配某一范围的区间
5.精确匹配某一列并范围匹配另外一列
一列全部匹配,一列范围匹配
6.只访问索引的查询
查询值需要访问索引,而无需访问数据行
因为索引树种的节点是有序的,所以除了按值查找,也可以按照顺序查找,如果B-Tree可以按照某种方式查找到值,也可以按照这种方式用于排序
四.B-Tree索引的限制
1.只能匹配最左前缀
如果是匹配第一列之后的其他列进行查找,则无法使用索引
2.不能跳过索引中的列
不用使用第一列和第三列的索引取查找,而缺少了第二列
3.范围查找右边的列都不能使用索引
如果某个查询有个列查询范围,则其右边所有列都无法使用索引优化查找
-- 示例 索引列为a.b.c
select * from test where a = 'a' and b like '%b%' and c = 'd'
-- 则只能 a b 列使用索引,c列不能使用索引
因为索引列的顺序很重要,这些限制都和索引列的顺序有关