在向大家詳細介紹oracle b樹索引之前,首先讓大家了解下非唯一索引中,然後全面介紹oracle b樹索引。oracle b樹索引中不存在非唯一的條目。
在非唯一索引中,oracle會把rowid作為乙個額外的列追加到鍵上,使得鍵唯一。
exp:create index i on t( x , y ) ,從概念上講就是create unique index i on t(x , y , rowid)。oracle會首先按索引鍵值排序,然後再按照rowid公升序排序。
在唯一索引中,資料只按索引鍵值排序。
1.大多數情況下,oracle b樹索引的高度都是2或者3,所以一般情況下,在索引中找到乙個鍵只需要2或3次i/o。
2.oracle b樹索引所有葉子塊都應該在同一層上,並且葉子節點實際上都是雙向鍊錶,這樣在進行索引區間掃瞄(index range scan)的時候,只需通過葉子節點的向前或者向後就可以了,無需再對索引結構進行導航。
3.適當對oracle b樹索引存在重複值的列進行壓縮, 可以增加快取命中率,使i/o數減少,因為
相關的條目可能都存在在乙個塊中。(exp:create index i on t(userid , username) username=』steven』這個值可能就會對應於多個rowid放在同乙個索引塊中);但是帶來的負面作用是使索引結構複雜化,維護索引更耗時,查詢索引占用cpu更多的時間。(壓縮適合用於多列索引中)
4.oracle b樹索引的反向鍵索引主要用於緩解索引右側緩衝區忙等待。適合用於類似於sequence產生的pk主鍵上,因為這些列不太會需要使用區間掃瞄,也就是不會用到max(pk),min(pk),between and或者where pk < 200等查詢
5.如果在查詢中會有order by colum1 asc,column2 desc, 試著在建立索引時create index i on t(colum1 asc,column2 desc) , 因為oracle index預設是desc排序,在索引中排序總比在磁碟中排序好得多。
6.適合oracle b樹索引使用的2種情況:
1)訪問表中佔很小比例的行
2)根本不訪問表,所需查詢的資料全部在索引中
3)一種特殊的用法,使用索引訪問表的全部行,這樣的做法是為了使查詢最初的響應時間很短,不是針對總吞吐量進行的優化。
7.索引是按索引鍵順序儲存,索引會按鍵的有序順序進行訪問。索引指向的塊則隨機儲存在堆中。
8.建議:在thin表中使用oracle b樹索引查詢<2-3%的列,fat表中<20-25%的列。
ORACLE B樹索引概念的理解
b樹索引的概念 b樹索引是乙個典型的樹結構,不僅oracle,很多實際應用都用到,在oracle裡面分三個索引塊 1 葉子節點塊 leaf block 直接指向表裡的資料行。2 分支節點塊 branch block 指向分支節點或者是葉子節點。3 根節點塊 root node 也屬於分支節點,只是最...
你了解MySql覆蓋索引嗎?
簡單點來講,總是開篇簡單講,其實有的面試簡單說一下就夠啦,其實面試官就問你一下了解不了解。覆蓋索引是指,索引上的資訊足夠滿足查詢請求,不需要再回到主鍵上去取資料。下面詳細的講一下 覆蓋索引必須要儲存索引列的值,而雜湊索引 空間索引和全文索引不儲存索引列的值,所以mysql只能用b tree索引做覆蓋...
關於MySQL,你是否系統了解過?
mysql實戰45講 課程內容不算多,但是對於乙個小白來說,學習量還是比較大的,一遍兩遍都沒法完全掌握。為了後期不斷加深鞏固知識點的理解,首先我將課程中的知識點歸納成個人筆記,這樣之後對哪個知識點有疑問,我可以快速的定位到相關知識區,畢竟自己做的筆記還是有印象的 在整理完筆記後,知識點還比較零散,於...