Mysql8 如果计算索引的高度


读出页的大小: show global variables like 'innodb_page_size';
innodb_page_size | 16384


mysql8如何计算B+树的高度

1. 读取PAGENO
a. 读取table_id
select * from INNODB_TABLES where NAME='argus/collect_task_logs_1'\G;
返回:
TABLE_ID: 1231
NAME: argus/collect_task_logs_1
FLAG: 33
N_COLS: 13
SPACE: 174
ROW_FORMAT: Dynamic
ZIP_PAGE_SIZE: 0
SPACE_TYPE: Single
INSTANT_COLS: 0

b. 读取PAGENO
mysql> select * from INNODB_INDEXES where TABLE_ID=1231;
+----------+---------+----------+------+----------+---------+-------+-----------------+
| INDEX_ID | NAME | TABLE_ID | TYPE | N_FIELDS | PAGE_NO | SPACE | MERGE_THRESHOLD |
+----------+---------+----------+------+----------+---------+-------+-----------------+
| 449 | PRIMARY | 1231 | 3 | 12 | 4 | 174 | 50 |
| 450 | code | 1231 | 0 | 5 | 5 | 174 | 50 |
+----------+---------+----------+------+----------+---------+-------+-----------------+
可以看到主键索引的pageno为4

2. 读取pagesize
mysql> show global variables like 'innodb_page_size';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+

3. 主键: page_no * innodb_page_size + 64 = 4*16384+64 = 65600
code索引: page_no * innodb_page_size + 64 = 5*16384+64 = 81984
使用命令 hexdump -s 65600 -n 10 ./collect_task_logs_1.ibd

hexdump -s 65600 -n 10 ./collect_task_logs_1.ibd
0010040 0200 0000 0000 0000 c101
001004a

hexdump -s 81984 -n 10 ./collect_task_logs_1.ibd
0014040 0100 0000 0000 0000 c201
001404a

0200是索引的高度, 主键为0200,高度为3, code索引为0100,高度为2;


posted @ 2021-04-09 10:23  burke  阅读(338)  评论(0)    收藏  举报