网站首页 > 开源技术 正文
概述
今天主要介绍一下如何去计算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方面内容,感兴趣的朋友可以关注一下!
猜你喜欢
- 2025-07-03 面试官竟然问我订单ID是怎么生成的?难道不是MySQL自增主键?
- 2025-07-03 MySQL中如何设置自动递增id主键重新计数从1开始?
- 2025-07-03 领导不让用UUID作为MySQL主键,那我用啥?
- 2025-07-03 长方形主键/指纹识别 MX4 Pro真机曝光
- 2025-07-03 如何利用Redis做数据库的主键生成机制
- 2025-07-03 揪出那个无主键的表(mysql无主键)
- 2025-07-03 主键ID的几种生成方式(主键id的几种生成方式)
- 2025-07-03 access利用DAO设置数据表的主键(access设置主键的方法)
- 2025-07-03 保障数据完整性:深入解析Oracle数据库的主键和外键约束
- 2025-07-03 雪花算法,什么情况下发生 ID 冲突?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)