MySql教程

MYSQL 索引树高度计算

本文主要是介绍MYSQL 索引树高度计算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、Mysql 5.7高度计算

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

 

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       
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文件

[root@mes_rf mirror]# hexdump  -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一样,说明查询的是对的。

 

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'; 

 

其他计算方法一样

 

这篇关于MYSQL 索引树高度计算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!