DML 性能低下其中最严重的原因之一是无用索引的存在所有SQL的插入更新和删除操作在它们需要在每一行数据被改变时修改大量索引的时候会变得更慢 许多Oracle 管理人员只要看见在一个SQL 查询的WHERE语句出现了一列的话就会为它分配索引虽然这个方法能够让SQL运行得更快速但是基于功能的Oracle 索引使得数据库管理人员有可能在数据表的行上过度分配索引过度分配索引会严重影响关键Oracle 数据表的性能 在Oraclei出现以前没有办法确定SQL查询没有使用的索引让我们看看Oraclei提供了什么样的方法让你找到这些索引并删除它们 过程是相当简单的Oraclei有一个工具能够让你使用ALTER INDEX命令监视索引的使用然后你可以查找这些没有使用的索引并从数据库里删除它们 下面是一段脚本它能够打开一个系统中所有索引的监视功能 set pages ; set heading off; spoolrun_monitorsql select alter index ||owner||||index_name|| monitoring usage; from dba_indexes where owner not in (SYSSYSTEMPERFSTAT) ; 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_NAMEMONUSED CUSTOMER_LAST_NAME_IDX CUSTOMER YESNO |