编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

如何计算InnoDB主键索引B+树的高度?

wxchong 2025-07-03 20:27:55 开源技术 6 ℃ 0 评论

概述

今天主要介绍一下如何去计算InnoDB主键索引B+树的高度?一起来看看吧~


计算sql

B+树的高度通常是1-3; 在InnoDB的表空间文件中,约定 page number 为3的代表主键索引的根页,而在根页偏移量为64的地方存放了该B+树的page level。如果page level为1,树高为2,page level为2,则树高为3。索引树高度决定查询的IO次数,当然树高度越大则查询需要的IO次数就越多,查询效率相对来说就越低!

B+树的高度=page level+1;

SELECT
  b.name,
  a.name,
  index_id,
  TYPE,
  a.`SPACE`,
  a.`PAGE_NO`
FROM
  information_schema.`INNODB_SYS_INDEXES` a,
  information_schema.`INNODB_SYS_TABLES` b
WHERE a.`TABLE_ID` = b.table_id
  AND a.`SPACE` <> 0
  AND b.`NAME` = 'dbname/fxxxx'

通过InnoDB元数据表确认主键索引根页的 page number 为3,而其他的二级索引page number(PAGE_NO)为4、5、49、32799。


针对数据库表空间文件做相关的解析

因为主键索引B+树的根页在整个表空间文件中的第3个页开始,所以可以算出它在文件中的偏移量:16384*3=49152(16384为页大小 16KB)。

根页的64偏移量位置前2个字节,保存了page level的值,因此我们想要的page level的值在整个文件中的偏移量为:16384*3+64=49152+64=49216,前2个字节中。

接下来我们用hexdump工具,查看表空间文件指定偏移量上的数据:
分别查看fsl_order_stop、t表的ibd表空间文件

--49216表示的是316384+64(这里innodb_page_size设置为了16384,如果是8192就是38192)
hexdump -s 49216 -n 10 fsl_order_stop.ibd
hexdump -s 49216 -n 10 t.ibd

这里fsl_order_stop表的PAGE_LEVEL为00 02,那么索引的高度就为3,而t表的page level为0,从这里可以看出B+树高度为page level+1=1;


后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注一下!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表