索引利用率
虽然索引通过加快査询速度而提供了巨大的优点,但它对数据库中的空间利用率具有一定 的影响。如果一个索引根本未使用,则索引占用的空间就可以更好地用于其他地方。如果不需 要索引,也可以节省对索引有影响的插入、更新和删除操作的处理时间。可以使用动态性能视 图V$OBJECT_USAGE监控索引利用率。在HR模式中,怀疑EMPLOYEES表的JOBJD列上的索引未在使用。打开对此索引的监控,如下所示:
alter index hr.emp_job_ix monitoring usage;
快速査看V$OBJECT_USAGE视图,确保正在监控该索引:
select * from v$object_usage;
------------------------------------------------------
INDEX_NAME TABLE_NAME MON USED START_MONITORING
EMP_JOB_IX EMPLOYEES YES NO
07/24/2007 10:04:55
USED列将告诉我们是否访问该索引以满足査询。在完成了一整天的典型用户活动后,再次査看V$OBJECT_USAGE,然后关闭监控:
alter index hr.emp_job_ix nomonitoring usage;
select * from v$object_usage;
确定在一天中该索引似乎至少使用一次.
另一种极端是,可能过于频繁地访问索引。如果频繁地插入、更新和删除键值,那么索引 在空间利用率方面就会变得低效。下面的命令可以用作索引创建之后的基线,然后周期性运行以査看空间利用是否无效:
analyze index hr.emp_job_ix validate structure;
select pct_used from index_stats where name =
'EMP_JOB_IX';
PCT_USED列表明为使用中的索引分配的空间的百分比。随着时间的推移,会大量使用
EMPLOYEES表,这是由于公司中的雇员经常更换,并且其中的索引没有有效地使用其空间, 下面的analyze命令和select査询表明了这一点,因此决定重新构建索引:
SQL> analyze index hr.emp_job_ix validate
structure;
SQL> select pct_used from index_stafcs where name =
'EMP_JOB_IX';
SQL> altar index hr.emp_job_ix rebuild online;
注意alter index...代build语句中使用了 online选项。当重新构建索引时,索引表能够以最 少的系统开销保持联机。只在极少的情况下(例如,较长的键长度)可能不能使用online选项。