mysql innodb索引高度

水逸冰發表於2020-06-21

首先獲取表上的索引情況

mysql> 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='ming/test02';

+-------------+---------------+----------+------+-------+---------+
| name        | name          | index_id | type | space | PAGE_NO |
+-------------+---------------+----------+------+-------+---------+
| ming/test02 | PRIMARY       |       71 |    3 |    44 |       3 |
| ming/test02 | idx_test02_c2 |      400 |    0 |    44 |      39 |
+-------------+---------------+----------+------+-------+---------+
2 rows in set (0.85 sec)

type:

0 是非唯一二級索引。

3是聚簇索引。

1是automatically generated clustered index ( GEN_CLUST_INDEX );

2是unique nonclustered index;唯一的非聚簇索引

32是全文索引。

查詢innodb頁的大小

mysql> show global variables like 'innodb_page_size';

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.67 sec)

接下來要用到作業系統命令hexdump,以十六進位制檢視檔案

語法

hexdump [選項] [檔案]...

選項

-n length 只格式化輸入檔案的前length個位元組。

-C 輸出規範的十六進位制和ASCII碼。
-b 單位元組八進位制顯示。
-c 單位元組字元顯示。
-d 雙位元組十進位制顯示。
-o 雙位元組八進位制顯示。
-x 雙位元組十六進位制顯示。
-s 從偏移量開始輸出。
-e 指定格式字串,格式字串包含在一對單引號中,格式字串形如:'a/b "format1" "format2"'。

檢視索引高度

[root@mdb01 ming]# hexdump -s 49216 -n 10  ./test02.ibd

000c040 0200 0000 0000 0000 4700              
000c04a
[root@mdb01 ming]# hexdump -s 639040 -n 10  ./test02.ibd    
009c040 0200 0000 0000 0000 9001              
009c04a

指定的偏移量的計算公式是page_no * innodb_page_size + 64。

49216 = 3 * 16384 +64.

PAGE_LEVEL 的值為 0200,表示這棵二級索引樹的高度為 3(2+1)。

後面的4700和9001是索引的index_id。

作業系統上十六進位制轉十進位制:

[root@mdb01 ming]# echo $((0x47))  

71
[root@mdb01 ming]# echo $((0x0190))
400

9001的讀取順序,應該是按照 兩位為一組,倒著讀 ,那麼也就是01 90


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31480688/viewspace-2699790/,如需轉載,請註明出處,否則將追究法律責任。

相關文章