Oracle隐藏索引和索引可用性的讲解Oracle认证考试

文章作者 100test 发表时间 2009:09:30 21:32:04
来源 100Test.Com百考试题网


"libai">

  在我参与过的许多商店系统开发中,我发现在生产系统中创建一个索引并不需要经过详细的论证,甚至连应用程序代码也没有检查就创建了,大多数时候都是靠个人经验和感觉行事的,人们往往只会思考与创建索引有关的列是否会受到影响,完全靠临场反应,到最后数据库中往往有上百个索引创建了但可能从未使用过,或对 SQL执行性能有负面影响。作为一名DBA,我们有责任找到并清除这些闲置的以及对性能有负面影响的索引。但我们从哪里开始呢?其实Oracle已经为我们提供了解决之道。

  有两种基本的情况:

  1、 我们必须确定索引是否被使用,如果索引没有使用,只需要删除它就可以了。

  2、 如果索引被使用了,或认为索引将会被使用,对于这种索引,要确定索引对数据库性能的影响稍微有点难度。

  对于第一种情况(判断索引是否被使用),我们可以对数据库索引进行监视,关键是要监视足够长的时间,可以监视一小时,一天,一周或一个业务季度,这要取决于表上的索引是与什么相关的。

  那该如何监视一个索引呢?其实简单得很,只需要使用ALTER INDEX命令,加上MONITORING USAGE子句就可以了,还是来看一看实例吧:

  SQL>. ALTER INDEX pk_emp MONITORING USAGE.

  Index altered.

  SQL>. ALTER INDEX ix_emp_sal MONITORING USAGE.

  Index altered.

  当你在该表上进行SELECT,UPDATE,DELETE(没有INSERT)时,一旦使用了索引,就会在V$OBJECT_USAGE动态视图中将该索引标记为在使用中:

  SQL>. 0select * from emp where empno = 7844.

  EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

  ----- ------ --------- ---- --------- ----- ---- ------

  7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

  SQL>. SELECT v.index_name, v.table_name, v.monitoring, v.used, start_monitoring, end_monitoring FROM v$object_usage v, user_indexes u WHERE v.index_name = u.index_name.

  INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING

  ---------- ---------- --- --- ------------------- -------------------

  PK_EMP EMP YES YES 04/28/2009 10:16:51

  IX_EMP_SAL EMP YES NO 04/28/2009 10:17:01

  就这么简单。显然,如果前面的SELECT语句只是查询EMP表,或许我们应该删除掉IX_EMP_SAL索引。


相关文章


OracleCEO明确表示不会放弃MySQLOracle认证考试
被Oracle抛弃MySQL将何去何从?Oracle认证考试
简单的oracle物化视图Oracle认证考试
Oracle认证辅导:SQL条件的顺序对性能的影响Oracle认证考试
Oracle隐藏索引和索引可用性的讲解Oracle认证考试
对oracle执行计划进行监控Oracle认证考试
Oracle11g新特性:更加灵活的分区策略Oracle认证考试
常用的ORACLEPL_SQL管理命令Oracle认证考试
为什么Oracle应该继续支持NetBeansOracle认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛