zoukankan      html  css  js  c++  java
  • 关于索引失效的一点学习

    一、什么是索引失效

        索引状态为unusable,形同虚设;

    二、什么情况下会失效

        (1)表空间的移动:move一个表到另外一个表空间时,索引不会跟着一起move,索引会处于unusable的状态。

            移动表的语法:alter table table_name move tablespace tablespacename

             alter table SMS.user_INFO move tablespace education

             /

             select *
             from SMS.user_INFO
             where mobile='13515151515';

             -------本来此时user_info表上有一个mobile的索引,而此时却没有走,查看数据字典得知为unusable的状态;

         

        (2)修改分区表的全局索引之后,没有进行update indexes.

             truncate分区表的一个分区的时候,alter table tablename truncate partition partitionname update indexes.此时并没有update indexes.之后索引也会处于不可用状态。

        (3)总结一点:以上两个都是alter的DDL之后,会带来索引失效。。。。

        

        (4)分区索引的问题:局部分区索引的问题,一个分区删除之后,不影响其他分区上的局部分区索引。

             时间问题,不再加测试。

    三、解决办法

        A、对于(1)的解决办法,重建索引:

        alter index  sms.IDX_MOBILE  rebuild  tablespace indx

        ----重建索引,并更换表空间;(操作过程中会锁表)

        相关语法:

        alter index  sms.IDX_MOBILE  rebuild

        ----(操作过程中会锁表)

        alter index  sms.IDX_MOBILE  rebuild online

        ----在线重建索引 不影响dml。

       

       

        B、对于(2)就不能用A方法,A方法对于(2)是治标不治本;

        对于(2)应该是以下两种任选其一

        a.加上update indexes

        b.使用local关键字改用局部分区索引;

        global索引如何转换为分区索引?

        在线重定义然后rename索引的名字为正常名字、先删除再重建。倾向于前者;

     中间表    

    CREATE TABLE RST.user_info__NEW
    (
        MONTH     CHAR(6)       NULL,
        para2 NUMBER(9)     NULL,
        id  NUMBER(8)     NULL,
        para4 CHAR(11)      NULL,
        para5 NUMBER(8)     NULL
    )
    TABLESPACE EDUCATION
    NOLOGGING
    PCTFREE 0
    PCTUSED 0
    INITRANS 5
    MAXTRANS 255
    STORAGE(BUFFER_POOL DEFAULT)
    NOPARALLEL
    NOCACHE
    PARTITION BY RANGE(MONTH)
    (PARTITION PART1009 VALUES LESS THAN ('201010')
        COMPRESS,
     PARTITION PART1010 VALUES LESS THAN ('201011')
        COMPRESS,
     PARTITION PART1011 VALUES LESS THAN ('201012')
        COMPRESS,
     PARTITION PART1012 VALUES LESS THAN ('201101')
        COMPRESS,
     PARTITION PARTMAX VALUES LESS THAN (MAXVALUE)
        COMPRESS)
    /

    CREATE INDEX RST.IDX2_CONU
        ON RST.user_info_NEW(ID)
    TABLESPACE INDX
    NOLOGGING
    PCTFREE 10
    INITRANS 2
    MAXTRANS 255
    STORAGE(BUFFER_POOL DEFAULT)
    NOPARALLEL
    LOCAL
    (PARTITION PART1009 ,
     PARTITION PART1010 ,
     PARTITION PART1011 ,
     PARTITION PART1012 ,
     PARTITION PARTMAX )
    NOCOMPRESS

    ①能否进行重定义

    BEGIN
     DBMS_REDEFINITION.CAN_REDEF_TABLE('rst','user_info',2);
    END;

    ②开始重定义
    BEGIN
    DBMS_REDEFINITION.START_REDEF_TABLE('rst','user_info','user_info_new',NULL,2);
    END;

    ③同步数据

    BEGIN
    DBMS_REDEFINITION.SYNC_INTERIM_TABLE ('rst','user_info','user_info_new');
    END;

    ④完成重定义
    BEGIN
     DBMS_REDEFINITION.FINISH_REDEF_TABLE('rst','user_info','user_info_new');
    END;

    如果出现问题停止重定义

    begin
      dbms_redefinition.abort_redef_table('RST','user_info','user_info_new','PART1009');
    END;

    /

    begin
      dbms_redefinition.abort_redef_table('RST','user_info','user_info_new');
    END;

    ---then 索引变成了局部分区索引。然后rename以下就可以了 

    四、待研究的问题

       索引失效的根源在哪里,就需要好好研究索引、索引的维护、如何查找数据的 如何存储的。。。。

  • 相关阅读:
    Javascript 获取链接(url)参数的方法
    开源项目托管 SourceForge, Google Code, CodePlex
    17种正则表达式
    varchar(MAX)SQL2005的增强特性
    sql语句格式化工具
    中国学佛66句禅语
    Office 2003正版验证破解方法
    Installing Windows CE 6.0 tools on a Windows7 64bit PC (Updated again)
    Using C# Connector SQLite
    Invoking web services with Java clients
  • 原文地址:https://www.cnblogs.com/gracejiang/p/5890462.html
Copyright © 2011-2022 走看看