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/26506993/viewspace-1967743/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle對索引分析的優化Oracle索引優化
- Oracle union all 不走索引的優化Oracle索引優化
- 索引回表操作,ORACLE所作的優化索引Oracle優化
- Oracle優化案例-正確的使用索引(二)Oracle優化索引
- oracle優化器和不走索引的原因Oracle優化索引
- Oracle效能優化之虛擬索引Oracle優化索引
- 理解索引:索引優化索引優化
- Oracle優化案例-分割槽索引之無字首索引(六)Oracle優化索引
- Oracle優化-索引原理[注意索引跳躍式掃描!Oracle優化索引
- ORACLE 9i資料庫優化案例(2) --- 單列索引變複合索引的優化Oracle資料庫優化索引
- 【oracle 效能優化】組合索引查詢。Oracle優化索引
- MSSQL優化之索引優化SQL優化索引
- oracle全文索引之同步和優化索引做了什麼Oracle索引優化
- Mysql索引優化之索引的分類MySql索引優化
- Oracle優化案例-自定義函式索引(五)Oracle優化函式索引
- Elasitcsearch索引優化索引優化
- MySQL索引優化MySql索引優化
- mysql優化索引MySql優化索引
- SQL優化-索引SQL優化索引
- MySQL 效能優化之索引優化MySql優化索引
- 使用Elasticsearch的動態索引和索引優化Elasticsearch索引優化
- 【oracle 效能優化】組合索引之index_ssOracle優化索引Index
- mysql索引的使用和優化MySql索引優化
- 面試必備的索引優化面試索引優化
- 全文索引的效能優化索引優化
- MySQL調優之索引優化MySql索引優化
- Mysql索引優化(一)MySql索引優化
- MySQL 5.7 索引優化MySql索引優化
- Oracle 索引的最佳化Oracle索引
- 淺談MySQL的B樹索引與索引優化MySql索引優化
- mysql 語句的索引和優化MySql索引優化
- sql優化之多列索引的使用SQL優化索引
- SQLServer索引優化(2):對於索引中include的理解SQLServer索引優化
- 字首索引,一種優化索引大小的解決方案索引優化
- MySQL 字串索引優化方案MySql字串索引優化
- MongoDB索引優化詳解MongoDB索引優化
- MySQL 索引原理以及優化MySql索引優化
- mysql索引原理及優化MySql索引優化