MySQL B+树索引效率为什么快
共 890字,需浏览 2分钟
·
2021-07-11 00:43
B+树结构
Mysql 我们都知道他的存储结构是B+树的格式,B+树也是一个平衡二叉树,和B树的区别是,B+树数据存储在叶子节点B+树 如下图我这边有1 ,2, 3,4, 5 五个数据B+树的结构存储如下,这个五个数分别存储在对应的叶子节点上,分布在B+树上面
mysql索引查找算法是二分查找方式,时间复杂度是log(n) 如果我们要查找5这个数字,基于二分查找,先找到3根节点,因为5 > 3 从树的右边开始查 3 、4、5 基于二分查找找到4 然后对比4 > 5 找到5,整个过程经历了3次 IO操作就查找到了数据。mysql索引查找数据也就大部分情况下经历3次IO操作, 目前innodb存储最小单位是页,页的最小单位容量是16kb,一个节点上面一页数据16kb,如果我们一个索引key占用8个字符加上6个字符的指针,每一行数据占用1kb mysql存储数量大概是 根节点-[(16*1024)/(8+6) ]*(第二层节点(16*1024)/(8+6) )*16(第三层节点) = 21902400条数据,千万级数据索引树结构只需要3层,查找只需要进行3次IO效率非常高,这些B+树优势
聚族索引
聚族索引类似/主键索引,索引行数据都放在叶子节点上面
非聚族索引
二级索引:通过两次索引查找,叶子节点存放的是主键索引信息,再通过主键索引遍历一次 IO 去查找对应行数据
联合索引:两个字段联合起来,存储的是主键索引数据,不需要减少访问B+ 树的数量
最左匹配原则 如 A B C 三个字段索引
A AB ABC 三种索引类型有效,BC 无效