Mysql为什么采用b+树作为数据结构?
上结论
- 树高度较低,三层高度的树就能够存储千万级别的数据。
- 所有的数据都存放在叶子结点,结合树高度。每次查询的目标数据的效率稳定,高度基本固定。
- 所有的数据都是依次排好序的,在范围查询时效率更高。
问题-:为什么三层高度的数据结构就能存储千万级别的数据?
- 在聚集索引中,所有的数据都是存放在b+树最底层的叶子节点上。非叶子节点只存储主键索引(默认有主键)。
- 我们把主键设置为bigint类型,那么所占用大小就是8B。然后指针占用的大小是6B
- mysql默认的是以页为单位存储数据的也就是16KB,SHOW GLOBAL STATUS like 'Innodb_page_size’;
- 也就是说 第一层能够存储的索引数量为:16kb/14b = 1170 个 索引,同理第二层就是 1170*1170=1368900 个
- 第三层每一个索引存放着表中一行记录。我们假设一行记录为 1kb 吧。所以一页就只能存16个
- 那么三层一起存放的数据量就是 1170 * 1170 * 16 = 21,902,400