MYSQL 索引树高度计算

一、Mysql 5.7高度计算

1. 从视图查询计算索引树高度表的索引存储信息

 

1
2
3
4
5
6
7
8
9
mysql> SELECT b.name, a.name, index_id, a.PAGE_NO   FROM  information_schema.INNODB_SYS_INDEXES a join  informattion_schema.INNODB_SYS_TABLES b       <br>on  a.table_id = b.table_id where b.name='mirror/FLEX_RF_RESULT_2022_05_022';
+----------------------------------+-----------------------+----------+---------+
| name                             | name                  | index_id | PAGE_NO |
+----------------------------------+-----------------------+----------+---------+
| mirror/FLEX_RF_RESULT_2022_05_02 | GEN_CLUST_INDEX       |      110 |       3 |
| mirror/FLEX_RF_RESULT_2022_05_02 | FLEX_RF_RESULT_PIDX01 |      111 |       4 |
| mirror/FLEX_RF_RESULT_2022_05_02 | FLEX_RF_RESULT_PIDX02 |      112 |       5 |
+----------------------------------+-----------------------+----------+---------+
3 rows in set (0.00 sec)

index_id:索引的标识符。索引标识符在实例中的所有数据库中都是唯一的。

PAGE_NO:索引 B 树的根页码,比如为5,则为这个表是从page5 开始算起的

2.计算高度:

主要使用的命令为:hexdump

1)找到表的ibd文件

1
2
3
[root@mes_rf mirror]# hexdump  -C -s 81984 -n 10  FLEX_RF_RESULT_2022_05_02.ibd
0014040 0200 0000 0000 0000 7000              
001404a

-s 跳过多少开始计算page

-n 一共取多少字节,因为一个page_level(2字节),一个page_index_id(8字节)一共取十个字节

-s 81984=5*16*1024+64

   5:代表从5以后开始计算(前面的0 1 2 3 4页不包含)

   16 :一个页16KB

   1024: KB和字节换算

 64:一个page的前64字节不算

得到的结果:

0014040 0200 0000 0000 0000 7000
001404a

主要看0020代表索引树高度:因为mysql为16进制,所以0200代表:3层索引树,因为索引树从0算起,0 1 2 中间的0000 0000 0000 不用看,7000换算成10进制为112刚好和index_id一样,说明查询的是对的 (16转2进制)。

 

3.mysql8.0的索引树计算高度方法一样

区别:查询的视图表有区别

 select b.NAME, a.NAME, a.INDEX_ID, a.PAGE_NO from information_schema.innodb_indexes as a   join  information_schema.innodb_tables as b on a.table_id=b.table_id where b.name='test/t100w'; 

 

其他计算方法一样

 

posted @   学的都会  阅读(947)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示