mysql为什么使用B+树,而选择二叉树、B树创建索引

mysql是怎么依据索引提升查找效率的?

有如下一个mysql数据表,使用c2列创建索引,在磁盘上会生成一个索引文件表。下图以二叉树结构举例创建了一个索引表。在没有索引的情况下,要查找数据需要一行一行查找,搜寻一行就产生一次IO操作,效率上肯定是比较慢的。如果创建索引表,我们就可以先查询索引,再根据查找到的节点指向,就可以寻找到mysql数据表中对应的数据了。这样就减少了搜索次数,从而提高效率。

mysql为什么使用B+树,而选择二叉树、B树创建索引_第1张图片

各数据结构创建索引对比 

二叉树

mysql为什么使用B+树,而选择二叉树、B树创建索引_第2张图片

每查找一个节点,就相当于一次IO操作。当一张表的数据十分庞大时,二叉树的深度就会变大,这样即使创建了索引其实对查询快慢也并没有提升多少。

B树

mysql为什么使用B+树,而选择二叉树、B树创建索引_第3张图片

 B树相对于二叉树而言,它在节点上可以存放多个不同节点,以此减小树的深度(上图举例中:每个节点最多存在三个,其实还可以有更多)。

分享一个在线演示生成B树的网站B-Tree Visualization

生成B+树

B+树

mysql为什么使用B+树,而选择二叉树、B树创建索引_第4张图片

 B+树相对于B树的改变在于;叶子节点包含了所有索引字段。叶子节点之间形成链表,且是一个升序链表。这样的好处:可以提高区间的访问性能,在项目中会存在大量的范围查询,在子节点中查找到了数据,就可以顺着链表依次向后查找,从而避免了全表查询。

你可能感兴趣的:(Mysql,数据结构,mysql)