DBA笔记-第八部分

出道关于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的情况较多。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值