zoukankan      html  css  js  c++  java
  • Oracle unusable index 与unvisible index

    可见性

    索引的可见性(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;
      
    • 相关参数 optimizer_use_invisible_indexes 此参数可以控制优化器生成执行计划时,是否考虑使用invisible index. 参数值为bool类型,当设置为true时,CBO会考虑使用invisible index. 默认为false. 此参数可以在会话或者系统全局或者实例级别进行设置。
      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;
      
    • 作用 在进行SQL优化时,不明确一个索引的创建或者删除对系统是否有影响,此时,我们可以先将索引设置为inbisible状态,然后,进行测试观察,如果与预期一致,再将索引设置主visible,或者删除。 不可见索引,是对于我们预期的一种难途径。

    可用性

    索引可用性(usable),正常情况下,索引都是可用的。当索引不可用(unusable)时, Oracle 内部会把该索引元数据(即创建语句包含的基本信息)与真实物理数据之间的对应关系撕裂,相关数据块可被重用。索引段是否已创建 (dba_indexes.segment_created)这一属性,会变为no(正常情况下,应为yes). unusable索引,想要被重新使用,只有一种方法: rebuild. 当然还可以先drop 再create.

    • 一般情况下,CBO不考虑使用unusable状态的索引,包含分区表。
    • 当索引不可用时,Oracle 清除索引数据,并且不再维护
    • 本地索引中,可以设置某个分区的索引为unusable。 
    • 相关参数 skip_unusable_indexes
      参数作用 控制对unusable 的非唯一索引,dml操作时是否维护索引数据
      参数值 true | false
        当参数设置为true时(默认),oracle对索引数据的维护及CBO优化器都不会考虑该索引。
        当参数设置为false时,DML操作及CBO生成执行计划时都会考虑该索引。一旦与unusable索引相关的操作都会失败。会话报错退出。
    note 
    如果是唯一索引,DML时,oracle都会去校验索引可用性,如果索引不可用,就不能保证数据唯一性。

    ===================
    天行健,君子以自强不息
    地势坤,君子以厚德载物
    ===================
  • 相关阅读:
    解决CollectionView TableView reloadData或者reloadSections时的刷新的闪烁问题
    HTTP请求头
    Fastlane 使用笔记
    python-函数式编程
    python-高级特性
    python基础使用
    python基础-函数02
    python基础-函数01
    python基础
    Linux基础
  • 原文地址:https://www.cnblogs.com/halberd-lee/p/7878211.html
Copyright © 2011-2022 走看看