B+Tree作为Mysql索引的优势?

B+Tree的性质:

  • 非叶子节点只存储键值信息。(可以存放更多的索引)
  • 所有叶子节点之间都有一个链指针。(提高区域访问效率)
  • 数据记录都存放在叶子节点中。(查找数据更加快速)

1.非叶子节点只存储键值信息--Mysql的InnoDB存储引擎查找到一行记录最多只需要3次磁盘IO操作(10亿条数据量)

InnoDB存储引擎中页的大小为16KB,一般表的主键类型为INT(占用4个字节)或BIGINT(占用8个字节),指针类型也一般为4或8个字节,也就是说一个页(B+Tree中的一个节点)中大概存储16KB/(8B+8B)=1K个键值(因为是估值,为方便计算,这里的K取值为〖10〗^3)。也就是说一个深度为3的B+Tree索引可以维护10^3 * 10^3 * 10^3 = 10亿 条记录。

2.所有的叶子结点之间都有双向指针--提高了Mysql顺序查找的能力

相比较B-Tree,只能一个一个结点的进行中序遍历,而对于哈希索引是无法支持范围查询,B+Tree可以通过结点之间的双向指针进行查找

3.数据全部存储在叶节点中可直接获取到数据,减少了IO次数,提高了效率

猜你喜欢

转载自blog.csdn.net/a1_HelloWord/article/details/104340024