索引優化和維護
1)選擇可選性高的欄位建立索引。
2)對於多表連線,選擇被驅動表的連線欄位建立索引
3)如果選擇欄位有多個但可選性都不高,建議建立複合索引,複合索引的首個欄位應選擇使用率最高的欄位
為了避免索引被抑制,SQL語句中應避免以下情況:
1)欄位型別不匹配
2)條件語句中使用了函式(包括自定義函式)
3)條件語句中使用了公式
函式索引可針對上面第2)條情況,但因為DML操作對維護函式索引的成本較高,應慎重使用。
與索引有關的等待事件主要是db file sequential read,原因可能是
1)應用設計好,索引使用率高(正常現象)。
2)索引建立得過多,DML操作帶來索引維護的開銷。
3)索引碎片過多。
4)索引設計不好,可選度低,近似於全表掃描。
監控索引是否被使用
多餘的索引會增加維護開銷,因此有必要確認是否存在多餘索引。
點選(此處)摺疊或開啟
-
alter index price_pk_id monitoring usage;
- alter index bom_pk_id monitoring usage;
點選(此處)摺疊或開啟
- select * from v$object_usage;
INDEX_NAME TABLE_NA MONITO USED START_MONITORING
------------ -------- ------ ------ -------------------------
END_MONITORING
-------------------------
PRICE_PK_ID PRICE YES NO 10/22/2014 11:59:51
BOM_PK_ID BOM YES YES 10/22/2014 12:03:51
點選(此處)摺疊或開啟
-
alter index price_pk_id nomonitoring usage;
- alter index bom_pk_id nomonitoring usage;
檢視索引碎片
大量索引碎片會降低索引效能,檢視索引碎片:
點選(此處)摺疊或開啟
- analyze index price_pk_id validate structure offline;
點選(此處)摺疊或開啟
-
select name,del_lf_rows_len,lf_rows_len
-
,(del_lf_rows_len/lf_rows_len)*100 as rate
- from index_stats;
NAME DEL_LF_ROWS_LEN LF_ROWS_LEN RATE
--------------- --------------- ----------- ----------
PRICE_PK_ID 5459 5480620 .099605519
當索引碎片超過20%,表示已經非常嚴重,應選擇重建索引。
而此時,索引的叢集因子應該也非常大,檢視:
點選(此處)摺疊或開啟
- SELECT i.index_name, i.CLUSTERING_FACTOR FROM dba_indexes i WHERE i.index_name like ’PK_TESTCF%’;
點選(此處)摺疊或開啟
- alter index price_pk_id rebuild;
2015.4.23更新
對於已經重建的索引,立即查詢叢集因子,可能並沒有看到有什麼變化:
點選(此處)摺疊或開啟
-
col index_name format a15
-
col index_type format a10
-
col num_rows format 999,999,999
-
col LEAF_BLOCKS format 999,999,999
-
col CLUSTERING_FACTOR format 999,999,999
-
-
SELECT INDEX_NAME, INDEX_TYPE, NUM_ROWS, LEAF_BLOCKS, CLUSTERING_FACTOR
-
FROM DBA_INDEXES
- WHERE INDEX_NAME='IOB';
INDEX_NAME INDEX_TYPE NUM_ROWS LEAF_BLOCKS CLUSTERING_FACTOR
--------------- ---------- ------------ ------------ -----------------
IOB NORMAL 0 0 0
點選(此處)摺疊或開啟
-
analyze index HK.IOB validate structure offline;
-
-
col index_name format a15
-
col index_type format a10
-
col num_rows format 999,999,999
-
col LEAF_BLOCKS format 999,999,999
-
col CLUSTERING_FACTOR format 999,999,999
-
-
SELECT INDEX_NAME, INDEX_TYPE, NUM_ROWS, LEAF_BLOCKS, CLUSTERING_FACTOR
-
FROM DBA_INDEXES
- WHERE INDEX_NAME='IOB';
INDEX_NAME INDEX_TYPE NUM_ROWS LEAF_BLOCKS CLUSTERING_FACTOR
--------------- ---------- ------------ ------------ -----------------
IOB NORMAL 7,217 17 126
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22621861/viewspace-1307169/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql知識點系列-索引全解密(型別、維護、優化)MySql索引解密型別優化
- postgresql 優化與維護SQL優化
- MYSQL索引優化思維導圖MySql索引優化
- Oracle 索引的維護Oracle索引
- 聊聊索引和SQL優化索引SQL優化
- Sql Server系列:索引維護SQLServer索引
- 關於 Oracle 分割槽索引的建立和維護Oracle索引
- MySQL-效能優化-索引和查詢優化MySql優化索引
- 使用Elasticsearch的動態索引和索引優化Elasticsearch索引優化
- mysql索引的使用和優化MySql索引優化
- 理解索引:索引優化索引優化
- mysql索引優化和TCP協議MySql索引優化TCP協議
- mysql 語句的索引和優化MySql索引優化
- SQL Server調優系列進階篇(如何維護資料庫索引)SQLServer資料庫索引
- SQLServer索引維護常用方法總結SQLServer索引
- 分割槽索引維護(add partition)索引
- mysql效能優化-慢查詢分析、優化索引和配置MySql優化索引
- MSSQL優化之索引優化SQL優化索引
- 【eygle】Oracle的分割槽表和Local索引建立與維護Oracle索引
- SQL精華總結索引型別優化SQL優化事務大表優化思維導圖❤️SQL索引型別優化
- Elasitcsearch索引優化索引優化
- MySQL索引優化MySql索引優化
- mysql優化索引MySql優化索引
- SQL優化-索引SQL優化索引
- SQL優化之統計資訊和索引SQL優化索引
- MySQL 效能優化之索引優化MySql優化索引
- oracle全文索引之同步和優化索引做了什麼Oracle索引優化
- oracle優化器和不走索引的原因Oracle優化索引
- MySQL調優之索引優化MySql索引優化
- MySQL 的索引型別及如何建立維護MySql索引型別
- Oracle資料庫中索引的維護 ztOracle資料庫索引
- Oracle資料庫中索引的維護(zt)Oracle資料庫索引
- Oracle資料庫中索引的維護(轉)Oracle資料庫索引
- Mysql索引優化(一)MySql索引優化
- MySQL 5.7 索引優化MySql索引優化
- Oracle 索引的優化Oracle索引優化
- 資料維護和基礎架構維護-有感架構
- 網站優化到後期該如何更好的維護排名?網站優化