日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

racle B-Tree和Bitmap索引对比详解

發布時間:2024/4/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 racle B-Tree和Bitmap索引对比详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?http://space.itpub.net/13062352/viewspace-614553

oracle B-Tree和Bitmap索引對比詳解

B樹索引是所有大型關系數據庫畢用的技術,也是oracle數據庫默認的索引技術。
基數:指的是你要創建索引的列中所包含的不同鍵值的數量。例如我們的列是性別,那么它的鍵值就是男、女所以你的索引基數是2.
oracle中每個表的行都有一個rowid,用于標記這個行在數據庫中的位置。

關于索引:
B-TREE索引,結構如下:
?????????????? root
?????????????? / | \
? branch1 ........
???? /|\ ......................
leaf1......

leaf節點的結構是這樣的:
?? |索引頭|列長度|列內容|rowid(s)|

一個葉子節點的大小大概是8192*8bit,因此一個字段的長度即使是50,那么一個節點大概能分成100個子節點,那么100萬的記錄,也只需要3級節點即可索引完畢,因此一般b-tree的深度不超過4級,這樣根據b-tree來查找一條記錄,最多只需遍歷4個節點找到rowid,再根據rowid查找磁盤即可得到最終記錄數據。


對某列查詢的結果集記錄數如果通常都小于7%,則應該在該列添加索引。對b-tree來說,where xx is null條件是不會利用索引的,因此建議這種列應該設置默認值,以避免該列的值存在null的情況,同樣group by 中如果該列有null索引也可能無效。

bitmap索引:
bitmap索引的結構也是樹形結構,但是葉子節點的結構與b-tree不一樣。bitmap葉子節點的結果大概如下:
<key1 start-rowid? end-rowid? bitmap>
<key2 start-rowid? end-rowid? bitmap>
......
其中bitmap的內容是110010100011100001這樣的01組合形式,它的長度與start-rowid和end-rowid之間包含的rowid數量一致。這樣假設范圍內第9個rowid對應列的內容是key1,那么kei1對應的bitmap中第9個字符的值就是1,否則就是0。同樣每個塊的大小是8192*8,那么一個bitmap索引的葉子節點大概能索引10000條記錄。
bitmap索引對null的字段依然有效,具體null的值在bitmap中是取0還是專門有個keyX的值是null來區分需要再查證。bitmap索引對or條件的查詢效果非常好,它不適應與索引列的值經常變化的情況,如果索引列的值經常變化,那么對bitmap索引將是災難性的,因為它要鎖定所有相關的葉子節點所在的塊來更新bitmap的值,它適用于決策支持系統。

?

總結

以上是生活随笔為你收集整理的racle B-Tree和Bitmap索引对比详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。