Oracle 索引的最佳化

531968912發表於2016-09-23
在以寫為主的應用中,索引的維護需要消耗一定的 CPU 和 I/O 資源,不要建立沒有必要的索引,防止冗餘索引的出現。


如何選擇合適的欄位來建立索引?

1、選擇那些經常出現在 WHERE 條件中的欄位

2、選擇那些經常用於表連線的欄位

3、選擇具有高選擇性的欄位。當一個欄位中重複資料越少時,欄位的選擇性就越高。

4、不要在僅有幾個值(或少量值)、有大量重複資料的欄位上建立 B 樹索引。在這種情況下,如果資料庫不是有大量的寫操作或在OLTP環境下,可以考慮使用點陣圖索引。

5、不要在經常更新的欄位上建立索引。在對索引欄位進行 DML 操作的時候,索引同樣進行對應更新。對索引的操作也會產生額外的 undo 和 redo。

6、考慮外來鍵上建立索引,這樣的索引允許更新和刪除父表時,子表不會被鎖。

7、當選擇建立一個索引時,考慮查詢效能的提升和DML操作的延時之間,哪個成本更大,是否值得建立索引。


聯合索引

相比單欄位的索引,聯合索引可以具有額外優點

1、提升了索引的選擇性,選擇性差的欄位兩個或多個組合到一起,可以提高聯合索引的選擇性。

2、減少了 I/O,如果查詢中的欄位均在聯合索引中,則資料庫直接從索引中提取資料,不需要到表中去取資料。


如何選擇聯合索引的欄位?


選擇出現在 WHERE 條件中用 AND 條件聯合在一起的欄位,特別是當兩個或多個 AND 結合在一起的欄位的選擇性大於單個欄位時。


如果選擇聯合索引中欄位的順序?


1、選擇在 WHERE 條件中處於領先部分的欄位,
例如,CREATE INDEX comp_ind ON table1(x, y, z);
x, xy, 和 xyz 是這個索引中的領先部分。
yz, y, 和 z 則不是。


2、把在 WHERE 條件中出現頻率更高的欄位放在前面


3、如果 WHERE 條件中的各欄位出現頻率相當,則把按照物理排序的欄位放在前面。

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

相關文章