Oracle 11g 新特性 -- Invisible Indexes(不可见的索引) 说明

2014-11-24 18:22:21 · 作者: · 浏览: 0

一.Invisible Indexes 说明


使索引不可见是使索引不可用或删除索引的一种替代办法。使用不可见的索引,可完成以下操作:


(1) 在删除索引之前测试对索引的删除。


(2) 对应用程序的特定操作或模块使用临时索引结构,这样就不会影响整个应用程序。


注意:


与不可用的索引不同,不可见的索引在使用DML 语句期间仍会得到维护。



当索引不可见时,优化程序生成的计划不会使用该索引。如果未发现性能下降,则可以删除该索引。还可以创建最初不可见的索引,执行测试,然后确定是否使该索引可见。


可以查询*_INDEXES 数据字典视图的VISIBILITY 列来确定该索引是VISIBLE 还是INVISIBLE。


SQL> select visibility from dba_indexes where index_name='IDX_ID';


VISIBILIT


---------


VISIBLE




--创建不可见索引:


CREATE INDEX index_name ONtable_name(column_name) INVISIBLE;



--修改索引是否可见:


ALTER INDEX index_name INVISIBLE;


ALTER INDEX index_name VISIBLE;




二.示例


--创建表,索引,并收集统计信息:



SQL> create table dave(id number);



Table created.



SQL> begin


2 for I in 1 .. 10000 loop


3 insert into DAVE values(I);


4 end loop;


5 commit;


6 end;


7 /



PL/SQL procedure successfully completed.



SQL> create index idx_id on dave(id)invisible;



Index created.



SQL> execdbms_stats.gather_table_stats(ownname =>'&owner',tabname=>'&tablename',estimate_percent => &est_per ,method_opt =>'forall columns size 1',degree=>°ree,cascade => true);


Enter value for owner: sys


Enter value for tablename: dave


Enter value for est_per: 50


Enter value for degree: 2



PL/SQL procedure successfully completed.



SQL>