那些存在但是沒有使用的索引是以個導致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
國內最大的酷站演示中心!
新聞熱點
疑難解答