1. 程式人生 > >怎麼看innodb的B+TREE層數?

怎麼看innodb的B+TREE層數?

怎麼看innodb的B+TREE層數?,下面以sysbench_testdata.sbtest2為例檢視索引層數:
- 檢視相關係統

[email protected] [sysbench_testdata]>show create table sbtest2;
| sbtest2 | CREATE TABLE `sbtest2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `k` int(11) NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `k_2` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=67840915 DEFAULT CHARSET=utf8 |
1 row in set (0.00 sec)

[email protected]
[sysbench_testdata]>select count(id) from sbtest2; +-----------+ | count(id) | +-----------+ | 67840914 | +-----------+ 1 row in set (56.87 sec)
  • 檢視information_schema中相關表資訊,注意索引的PAGE_NO和:index_id
[email protected] [sysbench_testdata]>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='sysbench_testdata/sbtest2';
+---------------------------+---------+----------+------+-------+---------+
| name                      | name    | index_id | type | space | PAGE_NO |
+---------------------------+---------+----------+------+-------+---------+
| sysbench_testdata/sbtest2 | PRIMARY |       51 |    3 |    33 |       3 |
| sysbench_testdata/sbtest2 | k_2     |       58 |    0 |    33 |      38 |
+---------------------------+---------+----------+------+-------+---------+
2 rows in set (0.00 sec)

[email protected]
[sysbench_testdata]>show global variables like 'innodb_page_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | innodb_page_size | 16384 | +------------------+-------+ 1 row in set (0.00 sec)
  • 到表的檔案系統目錄中:cd /data/57mysql/mysql3508/data/sysbench_testdata
#hexdump -s 49216 -n 10 ./sbtest2.ibd
000c040 0300 0000 0000 0000 3300               
000c04a

#hexdump -s 622656 -n 10 ./sbtest2.ibd
0098040 0200 0000 0000 0000 3a00               
009804a
  • 注:hexdump中49216和622656是怎麼算出來的?這個數分別對應sbtest2表的兩個索引,公式是 page_no * innodb_page_size + 64。PRIMARY:316384+64=49216 k_2:3816384+64=622656 ,同時可以觀察hexdump結果中的3300和3a00,此數十六進位制為33和3a,轉換成十進位制為:51和58,分別和information_schema中的index_id對應上了.
  • 可以發現 主鍵索引(PRIMARY)的PAGE_LEVEL 為 0300,表示這棵二級索引樹的高度為 4,k_2索引的PAGE_LEVEL 為 0200,表示這棵二級索引樹的高度為 3.