索引使用最佳化的兩個操作

itpremier發表於2010-06-10

analyze index t_test1_idx1 validate structure;

會話檢視 index_stats

alter index pk_emp monitoring usage ;

全域性檢視 v$object_usage

[@more@]

INDEX_STATS" stores information from the lastANALYZE INDEX ... VALIDATE STRUCTUREstatement.
上面語句意思是說index_stats儲存最後一次對索引分析結構的資訊.
判斷一個所以是否需要重建,我們介紹一個簡單的方法:對一個索引進行結構分析後,如果該索引佔用超過了一個資料塊,且滿足以下條件之一:B-tree樹的高度大於3;使用百分比低於75%;資料刪除率大於15%,就需要考慮對索引重建:

特別說明:

使用百分比低於75%,有可能是因為表當前記錄資料很少造成的。這時一般不需要最佳化。

analyze index t_test1_idx1 validate structure;

Index analyzed.

SQL> select btree_space, -- if > 8192(塊的大小)
2 height, -- if > 3
3 pct_used, -- if < 75
4 del_lf_rows/(decode(lf_rows,0,1,lf_rows)) *100 as deleted_pct -- if > 20%
5 from index_stats;

BTREE_SPACE HEIGHT PCT_USED DELETED_PCT
----------- ---------- ---------- -----------
880032 2 89 0


如果超出了if 後面的值即可能需要進行 index rebuild.
注:index_stats只能在執行analyze的語句的session會話中看到數值,另外的會話是看不到的.即當前會話只能看到當前analyze分析後的結果.
--
可以用下面的過程分析所有的索引,將其寫入一張普通表中
DECLARE
BEGIN
EXECUTE IMMEDIATE 'truncate table stats_indexes';
FOR REC IN (SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_OWNER = 'CITRIX') LOOP
EXECUTE IMMEDIATE 'analyze index ' || REC.INDEX_NAME || ' validate structure';
INSERT INTO STATS_INDEXES
SELECT * FROM INDEX_STATS;
COMMIT;
END LOOP;
END;

-----------------
2, 檢視索引是否被使用。這個檢視是系統全域性的。
alter index pk_emp monitoring usage ;
alter index pk_emp nomonitoring usage;

select * from v$object_usage ;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/350519/viewspace-1034303/,如需轉載,請註明出處,否則將追究法律責任。

相關文章