索引 日常整理

看看哪些索引失效
select INDEX_NAME,STATUS from dba_indexes where STATUS<>'VALID';
status是N/A翻译成中文表示 不适用
因为dba_indexes.status只适用于非分区索引,如果是分区索引那么status就是N/A
status是unusable的是失效的索引
 
查看执行计划,看看有没有跑索引
EXPLAIN PLAN FOR SELECT * FROM DAVE;
set linesize 120
set pagesize 999
select * from table(dbms_xplan.display);
执行顺序:最里面最先执行。同一层次,从上到下顺序执行。
rows表示执行该步骤后返回的记录数。
bytes表示执行该步骤后返回的字节数=rows*avg_line_length
cost表示执行到该步骤的累计成本
 
表分析,也会分析索引,获取分析数据
begin
dbms_stats.gather_table_stats(OWNNAME          => 'boss_crm',
                                  TABNAME          => 'biz_product_serv',
                                  ESTIMATE_PERCENT => 30,
                                  METHOD_OPT       => 'FOR ALL INDEXED COLUMNS',
                                  degree           => 4,
                                  cascade          => true);
end;
/

索引分析
begin
dbms_stats.GATHER_INDEX_STATS(OWNNAME          => 'vcmp',
                              INDNAME          => 'C_INVOICE_USERID',
                              ESTIMATE_PERCENT => 10,
                              degree           => 4);
end;
/

分区索引分析
begin
dbms_stats.GATHER_INDEX_STATS(OWNNAME          => 'BOSS_CRM',
                              INDNAME          => 'SYS_IL0000085077C00017$$',
                              GRANULARITY => 'all',
                              ESTIMATE_PERCENT => 30,
                              degree           => 4);
end;
/
但是分区索引分析完也看不到最后分析时间,老万说正常

ps:以下内容未经测试,只是上网的总结和霞姐的话




如何重建索引
      a) 查看索引类型
select  t1.index_name,t1.partitioned from Dba_Indexes t1  
         where t1.Table_Name=upper('CCB_COGNOS_PROD_BALANCE_AA') 
索引名称                         是否分区索引  
GNOS_PROD_BALANCE_AA_N1      NO 
b)非分区索引
重建索引:alter index   cin.CCB_COGNOS_PROD_BALANCE_AA_N1          rebuild Nologging 
c)分区索引
          找出失效的分区索引:
select t.Index_Name, t.Partition_Name, t.Tablespace_Name, t.Status  
    from Dba_Ind_Partitions t  
   where t.Index_Name = 'CMZ_LOCAL_IDX_2'   

重建所有状态为unusable的索引
ALTER INDEX 索引名  
             REBUILD PARTITION 分区名  
             TABLESPACE 表空间名  
             NOLOGGING   




看看是不是失效了索引
select index_name,status from dba_indexes where Index_Name = 'EQUIPSTR_SERIALNO_IDX' 

你可能感兴趣的:(索引)