一个B+树中大概能存放多少条索引记录?
计算机在存储数据的时候,最小存储单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如 XFS/EXT4)最小单元是块,一个块的大小是 4KB。InnoDB 引擎存储数据的时候,是以页为单位的,每个数据页的大小默认是 16KB,即四个块。
真实环境中一个页存放的记录数量是非常大的(默认 16KB ),假设指针与键值,即record_type,next_record,其他信息等,看做 10 个字节,即 10B;假设每条记录占 1KB 的空间。在InnoDB引擎中,聚簇索引的情况下,叶子结点每页可以存 16KB ÷ 1KB = 16条记录。非叶子节点,每页可以存 16KB ÷ 10B = 1600 条指针(页号)。注意:非聚簇索引,不存储整条数据哦。
- 如果B+树只有1层,也就是只有1个用于存放用户记录的节点,最多能存放 16 条记录。
- 如果B+树有2层,非叶子节点只有1个,第一层可以存 16KB ÷ 10B = 1600 条指针(页号),第二层,即叶子层,每个叶子节点可以存16条记录,所以最多能存放 1600×16=25600 条记录。
- 如果B+树有3层,最多能存放 1600×1600×16=40960000 条记录。
- 如果存储千万级别的数据,只需要三层就够了
B+树的非叶子节点不存储用户记录,只存储目录记录,相对B树每个节点可以存储更多的记录,树的高度会更矮胖,IO次数也会更少。
|