Mysql为什么用B+树而不用B树,如果用B树,需要多少层树结构

B-树跟B+树最大的区别在于,B+树只在末级叶子结点处放数据表行数据,而B-树则会在叶子和非叶子结点上都放。
先分析下B-树将行数据存在非叶子节点上的情况是怎么样的,假设每个数据页还是16KB,掐头去尾每页剩15KB,并且一条数据表行数据还是占1KB,就算不考虑各种页指针的情况下,也只能放个15条数据。数据页扇出明显变少了。而B-树将行数据存在叶子节点上的情况就跟B+树的几乎一样。
所以计算可承载的总行数的公式也变成了一个等比数列。15 + 15^2 +15^3 + … + 15^z , 其中z还是层数的意思。
为了能放2kw左右的数据,需要z>=6。也就是树需要有6层,查一次要访问6个页。假设这6个页并不连续,为了查询其中一条数据,最坏情况大概需要进行6次磁盘IO。
而B+树同样情况下放2kw数据左右,查一次大概是3次磁盘IO。
磁盘IO越多则越慢,这两者在性能上差距略大。
为此,B+树比B-树更适合成为mysql的索引。

你可能感兴趣的:(mysql,mysql,b树,数据库)