mysql 如何得到innodb主鍵索引B+樹的樹高度

B+樹的高度通常是1-3; 在InnoDB的表空間文件中,約定 page number 為3的代表主鍵索引的根頁弯菊,而在根頁偏移量為64的地方存放了該B+樹的page level秸弛。如果page level為1裁厅,樹高為2柔昼,page level為2馍乙,則樹高為3布近。索引樹高度決定查詢的IO次數(shù),當(dāng)然樹高度越大則查詢需要的IO次數(shù)就越多丝格,查詢效率相對來說就越低撑瞧!

B+樹的高度=page level+1;

我們需要找到這個(gè)page level显蝌。在實(shí)際操作之前预伺,你可以通過InnoDB元數(shù)據(jù)表確認(rèn)主鍵索引根頁的 page number 為3订咸。

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;
+------------------------------------+-----------------------------+----------+------+-------+---------+
| NAME                               | NAME                        | index_id | type | space | PAGE_NO |
+------------------------------------+-----------------------------+----------+------+-------+---------+

| iam/biz_organization               | PRIMARY                     |      116 |    3 |    95 |       3 |
| iam/biz_patient_pdf_stamp_position | PRIMARY                     |      117 |    3 |    96 |       3 |
| iam/biz_patient_sign_pdf           | PRIMARY                     |      118 |    3 |    97 |       3 |
| iam/biz_patient_sign_pdf_details   | PRIMARY                     |      119 |    3 |    98 |       3 |
| iam/biz_signed_pdf                 | PRIMARY                     |      120 |    3 |    99 |       3 |
| iam/biz_signed_pdf_details         | PRIMARY                     |      121 |    3 |   100 |       3 |
| iam/biz_sys_info                   | PRIMARY                     |      122 |    3 |   101 |       3 |
| iam/biz_ukey_login                 | PRIMARY                     |      123 |    3 |   102 |       3 |
| iam/biz_ukey_login_details         | PRIMARY                     |      124 |    3 |   103 |       3 |
| iam/biz_ukey_sign                  | PRIMARY                     |      125 |    3 |   104 |       3 |
| iam/biz_ukey_sign_details          | PRIMARY                     |      126 |    3 |   105 |       3 |
| iam/biz_ukey_signed_pdf            | PRIMARY                     |      127 |    3 |   106 |       3 |
| iam/biz_ukey_signed_pdf_details    | PRIMARY                     |      128 |    3 |   107 |       3 |
| iam/biz_user                       | PRIMARY                     |      129 |    3 |   108 |       3 |
| iam/biz_user                       | mobile                      |      130 |    0 |   108 |       4 |
| iam/biz_user                       | authentication_mark         |      131 |    0 |   108 |       5 |
| iam/biz_user_employee_num          | PRIMARY                     |      230 |    3 |   188 |       3 |
| iam/biz_user_employee_num          | biz_num                     |      231 |    2 |   188 |       4 |
| iam/book                           | PRIMARY                     |      235 |    3 |   197 |       3 |
| iam/book                           | index_user_id               |      236 |    0 |   197 |       4 |

可以看出主鍵索引(PRIMARY)根頁的page number均為3,而其他的二級索引page number(PAGE_NO)為4還有5酬诀。

下面我們對數(shù)據(jù)庫表空間文件做想相關(guān)的解析:

[root@localhost iam]# ls -l *.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_h5_sign_details.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_h5_sign.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_organization.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_patient_pdf_stamp_position.ibd
-rw-r-----. 1 mysql mysql   9437184 10月 30 15:12 biz_patient_sign_pdf_details.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_patient_sign_pdf.ibd
-rw-r-----. 1 mysql mysql    131072 10月 30 15:12 biz_signed_pdf_details.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_signed_pdf.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_sys_info.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_ukey_login_details.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_ukey_login.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_ukey_sign_details.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_ukey_signed_pdf_details.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_ukey_signed_pdf.ibd
-rw-r-----. 1 mysql mysql     98304 10月 30 15:12 biz_ukey_sign.ibd
-rw-r-----. 1 mysql mysql   9437184 10月 30 15:12 biz_user_copy1.ibd
-rw-r-----. 1 mysql mysql   9437184 10月 30 15:12 biz_user_copy2.ibd
-rw-r-----. 1 mysql mysql   9437184 10月 30 15:12 biz_user_copy3.ibd
-rw-r-----. 1 mysql mysql    114688 11月 23 15:12 biz_user_employee_num.ibd
-rw-r-----. 1 mysql mysql   9437184 10月 30 15:12 biz_user.ibd
-rw-r-----. 1 mysql mysql 125829120 1月  26 09:19 book.ibd

因?yàn)橹麈I索引B+樹的根頁在整個(gè)表空間文件中的第3個(gè)頁開始脏嚷,所以可以算出它在文件中的偏移量:16384*3=49152(16384為頁大小 16KB)。

根頁的64偏移量位置前2個(gè)字節(jié)瞒御,保存了page level的值父叙,因此我們想要的page level的值在整個(gè)文件中的偏移量為:16384*3+64=49152+64=49216,前2個(gè)字節(jié)中肴裙。

接下來我們用hexdump工具趾唱,查看表空間文件指定偏移量上的數(shù)據(jù):
分別查看book、biz_user蜻懦、biz_patient_pdf_stamp_position三張表的ibd表空間文件

[root@localhost iam]# hexdump -s 49216 -n 10 book.ibd
000c040 0200 0000 0000 0000 eb00               
000c04a
[root@localhost iam]# hexdump -s 49216 -n 10 biz_user.ibd
000c040 0100 0000 0000 0000 8100               
000c04a
[root@localhost iam]# hexdump -s 49216 -n 10 biz_patient_pdf_stamp_position.ibd
000c040 0000 0000 0000 0000 7500               
000c04a
[root@localhost iam]# 

book 表的page level為2甜癞,B+樹高度為page level+1=3;
biz_user 表的page level為1阻肩,B+樹高度為page level+1=2带欢;
biz_patient_pdf_stamp_position 表的page level為0,B+樹高度為page level+1=1烤惊;

這三張表的數(shù)據(jù)量如下:

mysql>  select count(*) from book ;
+----------+
| count(*) |
+----------+
|   312221 |
+----------+
1 row in set (0.07 sec)

mysql>  select count(*) from biz_user  ;
+----------+
| count(*) |
+----------+
|     3570 |
+----------+
1 row in set (0.02 sec)

mysql>  select count(*) from biz_patient_pdf_stamp_position   ;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.02 sec)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乔煞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子柒室,更是在濱河造成了極大的恐慌渡贾,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雄右,死亡現(xiàn)場離奇詭異空骚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)擂仍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門囤屹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逢渔,你說我怎么就攤上這事肋坚。” “怎么了肃廓?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵智厌,是天一觀的道長。 經(jīng)常有香客問我盲赊,道長铣鹏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任哀蘑,我火速辦了婚禮诚卸,結(jié)果婚禮上葵第,老公的妹妹穿的比我還像新娘。我一直安慰自己合溺,他們只是感情好羹幸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辫愉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪将硝。 梳的紋絲不亂的頭發(fā)上恭朗,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機(jī)與錄音依疼,去河邊找鬼痰腮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛律罢,可吹牛的內(nèi)容都是我干的膀值。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼误辑,長吁一口氣:“原來是場噩夢啊……” “哼沧踏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起巾钉,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤翘狱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后砰苍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體潦匈,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年赚导,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茬缩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吼旧,死狀恐怖凰锡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情黍少,我是刑警寧澤寡夹,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站厂置,受9級特大地震影響菩掏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昵济,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一智绸、第九天 我趴在偏房一處隱蔽的房頂上張望野揪。 院中可真熱鬧,春花似錦瞧栗、人聲如沸斯稳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挣惰。三九已至,卻和暖如春殴边,著一層夾襖步出監(jiān)牢的瞬間憎茂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工锤岸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竖幔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓是偷,卻偏偏與公主長得像拳氢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蛋铆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容