Oracle 索引监控与外键索引

2014-11-24 18:05:32 · 作者: · 浏览: 0

1、普通监控索引的情形


--演示环境
SQL> select * from v$version where rownum<2;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production


--创建主表
SQL> create table ptb(deptno number constraint ptb_pk primary key,dname varchar2(20));


Table created.


--从scott.dept帐户复制数据
SQL> insert into ptb select deptno,dname from dept;


4 rows created.


SQL> commit;


Commit complete.


--开启索引监控
SQL> alter index ptb_pk monitoring usage;


--为主表收集统计信息
SQL> exec dbms_stats.gather_table_stats('SCOTT','PTB',cascade=>true);


PL/SQL procedure successfully completed


SQL> select * from v$object_usage where index_name='PTB_PK';


INDEX_NAME TABLE_NAME MON Use START_MONITORING END_MONITORING
------------------------------ ------------------------- --- --- ------------------- -------------------
PTB_PK PTB YES NO 03/22/2013 17:15:37


--注意上面的情形,收集统计信息时,索引被使用没有被监控到,在10g中则会被监控到
--下面开启autotrace
SQL> set autot trace exp;


SQL> select * from ptb where deptno=10;


Execution Plan
----------------------------------------------------------
Plan hash value: 3991869509


--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 12 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| PTB | 1 | 12 | 1 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | PTB_PK | 1 | | 0 (0)| 00:00:01 |
--------------------------------------------------------------------------------------


SQL> set autot off;
SQL> select * from v$object_usage where index_name='PTB_PK'; --索引使用被监控到


INDEX_NAME TABLE_NAME MON Use START_MONITORING END_MONITORING
------------------------------ ------------------------- --- --- ------------------- -------------------
PTB_PK PTB YES YES 03/22/2013 17:15:37