索引高度和索引段大小計算

lusklusklusk發表於2017-07-13

B*-Tree level (depth of the index from its root block to its leaf blocks). 
A depth of 0 indicates that the root block and leaf block are the same.

假如一個欄位長為50位元組,總計1000萬行


需要多少個block的葉子節點
葉子節點的一個條目=欄位鍵值+rowid=50+6=56B
一個block容量=8KB
block=1000萬*56/8K=7萬

需要多少block二級分支節點
分支節點的一個條目=欄位鍵值+rowid=50+6=56B
一個block容量=8KB
block=7萬*56/8K=490

需要多少block一級分支節點
分支節點的一個條目=欄位鍵值+rowid=50+6=56B
一個block容量=8KB
block=490*56/8K=3.43

需要多少根節點
根節點的一個條目=欄位鍵值+rowid=50+6=56B
一個block容量=8KB
block=3.43*56/8K=0.0.2

得出結論索引高度為3,索引段大小=(1+4+490+7萬)*8KB=563M
如果欄位長度為10,則索引段大小=(4/5+490/5+7萬/5)*8KB=112M,索引高度為2, 因為4/5小於1,所以一級分支節點就不要再分了,就是根節點了




一個索引條目最小為7B( 欄位1B大小,rowid 6B大小),一個索引塊最多可以存放8K/7=1142個索引條目,根節點最多指向1142個分支節點,分支節點最多指向1142個葉子節點
索引高度為0,索引段最大8KB
索引高度為 1,索引段最大(1+1142)*8KB= 8.92M
索引高度為 2,索引段最大(1+1142+1142*1142)*8KB= 10G
索引高度為 3,索引段最大(1+1142+1142*1142+1142*1142*1142)*8KB= 11T

折中一下,平時一個 欄位20B,索引條目26B,一個索引塊最多可以存放307個索引條目,根節點最多指向307個分支節點,分支節點最多指向307個葉子節點
索引高度為0,索引段最大8KB
索引高度為 1,索引段最大(1+307)*8KB= 2.4M
索引高度為 2,索引段最大(1+307+307*307)*8KB= 739M
索引高度為 3,索引段最大(1+307+307*307+307*307*307)*8KB= 221G

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

相關文章