那些存在但是沒有使用的索引是以個導致DML語言執行效率低下的嚴重問題,所有的 SQL語句如:INSERTS、UPDATES、和DELETES當它們要更新表中含有很多索引的行時將運行得很慢。ORACLE專業人士看到一列應用到SQL查詢語句的WHERE語句時將會重新設置索引,這有可能使得SQL語句運行更快。ORACLE提供的索引功能可能會重新配置索引到這些表中的列,這種重新配置的索引將削弱裝載ORACLE自關聯表的執行效率。在ORACLE9i前,沒有辦法表示哪些SQL查詢語句沒有使用的索引。現在我們通過ORACLE9i提供的方法可以找到和刪除這些沒有使用的索引。Oracle9i提供一個工具讓你使用ALTER INDEX 命令來監控索引使用情況。你可以定位和查找那些沒有使用的索引然後從數據庫中刪除。
下面一段代碼將打開對系統中使用的索引的監控。
Set pages 999;
Set heading off;
Spool run_monitor.sql
Select
‘alter index ‘||owner||’.’||index_name||’ monitoring usage;’
from
dba_indexes
where
ower not in (‘SYS’,’SYSTEM’,’PERFSTAT’)
;
spool off;
@run_monitor
等到這些重要的SQL在數據庫中執行完畢,查尋新的V$OBJECT_USAGE 視圖
select
index_name,
table_name,
mon,
used
from
v$object_usage;
如下所示,我們可以看到V$OBJECT_USAGE中有一列聲明為USED。它可以設置成YES或者NO,它不會告訴你Oracle使用這個索引要多少時間,但是這個工具有利於來研究不使用的索引。
INDEX_NAME TABLE_NAME MON USED
--------------- ------------------- --------- ---------
CUSTOMER_LAST_NAME_IDX CUSTOMER YES NO