DML 性能低下
其中最嚴重的原因之一是無用索引的存在
所有SQL的插入
更新和刪除操作在它們需要在每一行數據被改變時修改大量索引的時候會變得更慢
許多Oracle 管理人員只要看見在一個SQL 查詢的WHERE語句出現了一列的話就會為它分配索引
雖然這個方法能夠讓SQL運行得更快速
但是基於功能的Oracle 索引使得數據庫管理人員有可能在數據表的行上過度分配索引
過度分配索引會嚴重影響關鍵Oracle 數據表的性能
在Oracle
i出現以前
沒有辦法確定SQL查詢沒有使用的索引
讓我們看看Oracle
i提供了什麼樣的方法讓你找到這些索引並刪除它們
過程是相當簡單的
Oracle
i有一個工具能夠讓你使用ALTER INDEX命令監視索引的使用
然後你可以查找這些沒有使用的索引並從數據庫裡刪除它們
下面是一段腳本
它能夠打開一個系統中所有索引的監視功能
set pages
;
set heading off;
spoolrun_monitor
sql
select
alter index
||owner||
||index_name||
monitoring usage;
from
dba_indexes
where
owner 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
From:http://tw.wingwit.com/Article/program/Oracle/201311/17743.html