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