出道关于innodb存储的计算题,来分析为什么数据量不影响索引查询速度:
有一个表t
主键为a 大小为8字节
每行数据300个字节,
每页大小能存16k
那么 在b+树高度为123时
一页存放的记录数
B+ 树计算(使用 8 字节指针)
数据基础
- 每行记录的大小:300 字节
- 每页的大小:16,384 字节(16KB)
- 主键的大小:8 字节
- 指针的大小:8 字节
- 每个索引项的总大小:
每个索引项的大小=主键的大小+指针的大小=8+8=16 字节每个索引项的大小=主键的大小+指针的大小=8+8=16 字节
计算 B+ 树不同高度下的记录数
高度为 1
-
叶子层:16384/300=54,每页能存放 54 条记录。
总记录数:每页能存放 54 条记录。
高度为 2
-
第一层(根节点):16384/(8+8)=1024,可以存放 1,024 个索引项(每个索引项指向第二层的节点)。
-
第二层(叶子节点):每个叶子节点能存放 54 条记录。
总记录数:
总记录数=1,024(根节点能存放的索引项数)×54(每个叶子节点的记录数)=55,296总记录数=1,024(根节点能存放的索引项数)×54(每个叶子节点的记录数)=55,296
高度为 3
-
第一层(根节点):可以存放 1,024 个第二层节点。
-
第二层:每个第二层的节点可以存放 1,024 个索引项,每个第二层节点指向一个叶子节点。
-
第三层(叶子节点):每个叶子节点能存放 54 条记录。
总记录数:
总记录数=1,024×1,024×54=55,296,000总记录数=1,024×1,024×54=55,296,000
总结
在考虑 8 字节指针大小的情况下,B+ 树在不同高度下的记录数为:
- 高度为 1:每页能存放 54 条记录。
- 高度为 2:总记录数为 55,296 条记录。
- 高度为 3:总记录数为 55,296,000 条记录。
根据这个例子说明了一个问题,假设一块最差的硬盘一秒钟的I/O是一千次,更别提固态硬盘的速度了,索引搜索高度为3的数据,需要0.003秒,高度为4也就0.004秒,所以数据量不影响索引的查询速度,而且一般来说B+树高度不超过五,因为达到5就有五百亿的数据量,还是高度为4的情况较多。
标签:字节,记录,DBA,54,第八,笔记,024,索引,节点 From: https://blog.csdn.net/etinemark/article/details/140717987