看看哪些索引失效
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'