輕輕揭開 b*tree 索引結構的神祕面紗
阿新 • • 發佈:2019-01-02
對於該 root block 的例子(索引欄位型別為char(2000)):
row#0[8048] dba: 4230504=0x408d68
col 0; len 2; (2): 34 34 –- 通過 len=2 判斷明顯是索引鍵值字首,轉化為實際值則是'44',說明該 root block 的 lmc 指向的 branch block 的最後一個 leaf block 的最後一個索引條目的索引鍵值一定<'44'
col 1; TERM -- 這裡無需使用 ROWID 來保證索引邏輯的順序,所以為 TERM
row#1[6038] dba: 4230891=0x408eeb
col 0; len 2000 ; (2000): 39 39 39 20...20 -- 通過
len=2000 判斷為完整索引鍵值,轉化為實際值則是rtrim(col 0)='999',上一個 branch block 即 row#0 對應的 branch block 的最後一個 leafblock 的最後一條索引條目的索引鍵值一定等於'999'
col 1; len 3; (3): 00 40 8f -- len(3) 這裡是 rowid 字首,且上一個 branch block(row#0) 的最後一個 leaf block 的最後一條索引條目的索引鍵值的 ROWID 一定前兩位是'0040'後1位小於'8f'
row#0[8048] dba: 4230504=0x408d68
col 0; len 2; (2): 34 34 –- 通過 len=2 判斷明顯是索引鍵值字首,轉化為實際值則是'44',說明該 root block 的 lmc 指向的 branch block 的最後一個 leaf block 的最後一個索引條目的索引鍵值一定<'44'
col 1; TERM -- 這裡無需使用 ROWID 來保證索引邏輯的順序,所以為 TERM
row#1[6038] dba: 4230891=0x408eeb
col 0; len 2000
col 1; len 3; (3): 00 40 8f -- len(3) 這裡是 rowid 字首,且上一個 branch block(row#0) 的最後一個 leaf block 的最後一條索引條目的索引鍵值的 ROWID 一定前兩位是'0040'後1位小於'8f'