时间:2021-07-01 10:21:17 帮助过:17人阅读
索引的可见性(visibility)指的是该索引是否对CBO优化器可见,即CBO优化器在生成执行计划的时候是否考虑该索引,可以看作是索引的一个属性。如果一个索引可见性属性为:invisible. 默认情况下CBO优化器生成执行计划的时候,不再考虑该索引,仅此而已。与可见索引一样,执行DML操作时,数据库会相应维护索引的数据。但是对于local 索引,我们不能单独为某个分区 设置不可见属性,只能对整个索引设置不可见属性。
-- 创建索引时指定不可见属性 create index index_name on table_name(column_list) invisible; -- 后期调整可见性 alter index index_name invisible; alter index index_name visible;
SQL> select isses_modifiable,issys_modifiable,isinstance_modifiable from v$parameter where name=‘optimizer_use_invisible_indexes‘ ISSES ISSYS_MOD ISINS ----- --------- ----- TRUE IMMEDIATE TRUE alter session set optimizer_use_invisible_indexes=true; alter system set optimizer_use_invisible_indexes=true sid=‘*‘ scope=both;
索引可用性(usable),正常情况下,索引都是可用的。当索引不可用(unusable)时, Oracle 内部会把该索引元数据(即创建语句包含的基本信息)与真实物理数据之间的对应关系撕裂,相关数据块可被重用。索引段是否已创建 (dba_indexes.segment_created)这一属性,会变为no(正常情况下,应为yes). unusable索引,想要被重新使用,只有一种方法: rebuild. 当然还可以先drop 再create.
参数作用 | 控制对unusable 的非唯一索引,dml操作时是否维护索引数据 |
参数值 | true | false |
当参数设置为true时(默认),oracle对索引数据的维护及CBO优化器都不会考虑该索引。 | |
当参数设置为false时,DML操作及CBO生成执行计划时都会考虑该索引。一旦与unusable索引相关的操作都会失败。会话报错退出。 |
Oracle unusable index 与unvisible index
标签:hsi 之间 维护 cells created index str visible acl