Oracle 索引

Oracle 索引算法

主題數據結構

 

  • 索引意義
  • 索引特色
  • 索引優勢
  • 索引缺點
  • 使用索引的注意事項

 

索引意義性能

創建索引的意義,是爲了在海量數據的狀況下,提升數據的檢索速度;優化

 

索引特色spa

索引樹的高度較低。0層索引存放的是索引列的值和rowid,1層及以上索引存放的是索引塊的指針。指針

索引裏存放的是rowid和索引列的值,rowid存放的是索引所指向的行記錄的物理地址。排序

索引是有序的。索引

 

索引優勢內存

索引使用BTree數據結構,BTree有較快的查找算法,能夠大大提升數據的檢索速度。ci

索引是有序的,分組和排序的時能夠減小排序時間。

索引比要檢索或者排序的表小不少,足夠在內存中一次性讀取。經過索引肯定了數據位置,能夠直接讀取磁盤中的數據塊,減小磁盤IO操做。

 

索引缺點

索引是有序的,建立和維護索引的有序開銷比較大。

索引只存儲了索引列的值,存在回表查詢的問題。

 

使用索引的注意事項

索引應該建在經常使用的鏈接的列上,主要是一些外健,能夠加快鏈接速度。

索引應該創建在常常查詢的列上,加快檢索速度。

索引應該創建在常常須要排序的列上,由於索引是有序的。

索引應該創建在常常使用在where字句的列上,加快條件的判斷。

 

索引的數量應該恰當,要合理控制索引的數量,索引的建立和維護開銷大。

索引會影響更新。對錶記錄進行更新操做,會影響索引,須要維護索引的有序,開銷大。insert操做,索引越多,插入越慢;delete操做,海量數據定位刪除狀況下,有索引較快,刪除大量數據時有性能問題;update操做需快速定位,且修改不影響索引,性能影響較小。

查詢返回大量字段時,索引效果很差,由於存在回表查詢問題,比全表掃描的IO次數更多。儘量去掉沒必要要的字段,若還有多個必要字段,採用組合索引能夠避免回表。

組合索引的索引列數量最好不要超過三個。若都是等值查詢,索引列順序無影響。如有等值和範圍查詢,則等值查詢在前,範圍查詢在後。

若是單列索引和組合索引的前置列同樣,能夠不創建單列索引。

頻繁修改的列不該該創建索引,檢索性能和修改性能是相互矛盾的。

建立索引時會把整張表鎖住,建立完才釋放鎖。

 

設置分區索引,卻用不到分區條件上,性能將降低。

位圖索引創建在重複度低的列上,和頻繁更新的表上,會有很大的性能問題。BTree樹索引存儲的是列值,位圖索引存儲的是比特值,因此位圖索引體積小。惟一值越少越容易鎖定,因此位圖索引更新慢,會鎖住。

在max,min列上創建索引,性能有很大的提高。由於索引是有序的,能夠直接在頭和尾處找到須要的最小值和最大值。

distinct去重操做影響性能,在插入數據時就確保不插入重複數據。

count統計操做,在統計列上創建索引會提升統計速度。

列運算會讓索引失效,儘量避免在索引列上進行列運算,能夠轉換成普通的SQL寫法。

進行優化時,要考慮SQL語句的執行頻率和重要性。

相關文章
相關標籤/搜索