Oracle 索引的最佳化
在以寫為主的應用中,索引的維護需要消耗一定的 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 條件中的各欄位出現頻率相當,則把按照物理排序的欄位放在前面。
如何選擇合適的欄位來建立索引?
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle效能最佳化之虛擬索引Oracle索引
- MySQL的索引最佳化MySql索引
- Oracle最佳化經典文章------索引原理篇Oracle索引
- 索引@oracel索引技術之索引最佳化索引
- Elasitcsearch索引最佳化索引
- mysql最佳化索引MySql索引
- [最佳化]Oracle 內在索引和引數數的調整(轉)Oracle索引
- oracle的索引Oracle索引
- 最佳化SQL Server索引的技巧SQLServer索引
- 最佳化你的系統--索引(一) 正確使用索引索引
- SQL最佳化(一) 索引SQL索引
- 《PostgreSQL》 索引與最佳化SQL索引
- 索引使用最佳化的兩個操作索引
- ORACLE索引的管理Oracle索引
- SQL效能最佳化之索引最佳化法SQL索引
- SQLT 最佳化SQL 用複合索引代替單列索引的案例SQL索引
- 索引@oracle索引技術索引Oracle
- MySQL 中索引是如何實現的,有哪些型別的索引,如何進行最佳化索引MySql索引型別
- Oracle表與索引的分析及索引重建Oracle索引
- Oracle 索引Oracle索引
- Oracle的全文索引Oracle索引
- Oracle索引的監控Oracle索引
- Oracle 索引的優化Oracle索引優化
- Oracle索引HINT的使用Oracle索引
- Oracle 索引的分類Oracle索引
- Oracle 索引的維護Oracle索引
- Oracle索引梳理系列(六)- Oracle索引種類之函式索引Oracle索引函式
- MySQL-10.索引最佳化與查詢最佳化MySql索引
- 【索引】Oracle之不可見索引和虛擬索引的比對索引Oracle
- 【索引】oracle查詢使用索引和不使用索引的比較索引Oracle
- 【Oracle索引】-索引基本概念Oracle索引
- Oracle索引——點陣圖索引Oracle索引
- oracle 索引分析及索引重建Oracle索引
- SQL最佳化案例-分割槽索引之無字首索引(六)SQL索引
- MySQL 索引使用策略及最佳化MySql索引
- SQL最佳化案例-正確的使用索引(二)SQL索引
- oracle 索引和不走索引的幾種形式Oracle索引
- Oracle表與索引的分析及索引重建(轉)Oracle索引