B树、B+树
参考链接:
https://my.oschina.net/u/4116286/blog/3107389
一、二叉树不适合做索引结构的原因
1、若数据在插入过程形成线性链表,比如按照1234这种从大到小的顺序插入,树的高度就会无限增大,查找慢
二、平衡二叉树不适合做索引的原因:
1、搜索效率还不够高,当数据量庞大时,树的高度也会特别大,数据所处的深度决定了IO的次数,所以IO次数也会很大;
2、查询不稳定,若数据刚好在根节点,只需要一次IO,否则不确定需要多少次;
3、每个节点存储数据太少,没有利用好磁盘IO的预读能力。因为操作系统和磁盘的交互是以页为单位的,Mysql将一个节点大小设为一页,假设大小为4K,每个节点保存这么多数据,每次IO操作会读取4K大小的数据到内存,那么后续若查询的数据位于已经读取到内存的区域时,就可以减少一次IO操作。
三、不选择红黑树的原因;
增删改操作可能影响树的黑节点平衡,导致树自身一些节点进行左旋或右旋调整平衡,耗费性能。
三、mysql数据库选择B+树(多路平衡查找树)作为索引结构的原因
1、相比b树,所有数据存储在叶子结点中,所以查询性能稳定,而且同样的存储空间,B+树的高度会更小,因为其非叶子节点不存储实际数据;
2、叶子结点是顺序排列的,所以有排序优势;
3、充分利用操作系统和磁盘交互特性,Innodb存储引擎将节点/页大小设为16K,一次IO将16K大小的数据加载进内存中,提高预读能力,若后续查询在已读取的范围内命中则减少一次IO。举例,假设关键字类型为int类型,16K大小可以保存的数据量为16 * 1000 / 16 = 1000个,也就是一次读取1000个数据,相比平衡二叉树,1000个数据需要远多于一个节点来保存,IO次数也远远更多。

浙公网安备 33010602011771号