Home  >  Article  >  Database  >  Oracle 索引监控与外键索引

Oracle 索引监控与外键索引

WBOY
WBOYOriginal
2016-06-07 17:27:331004browse

Oracle 监控索引特性为我们提供了一个大致判断索引是否被使用的情形。之所以这么说,是因为在Oracle 10g 中收集统计信息时会导致

Oracle 监控索引特性为我们提供了一个大致判断索引是否被使用的情形。之所以这么说,是因为在Oracle 10g 中收集统计信息时会导致索引被监控,此并非sql语句而产生。而在11g则不会出现类型的情形。其次对于存在子表存在外键的情形,对于主表进行操作时是否会导致索引被监控呢?下面描述的是这个话题。

1、普通监控索引的情形

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

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

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn