對建有索引的表頻繁進行dml操做,會產生索引碎片,意味着對索引進行掃描時,須要讀取更多的block,影響執行效率,若是碎片比較大,而且可能會影響到執行計劃的準確性。能夠採用下面的方法對索引碎片作評估及消除。ui
一、識別索引碎片spa
計算公式: 索引碎片度 = 刪除的索引葉子數 / 總的索引葉子數 * 100%blog
爲保障準確性,先對索引作分析:索引
ANALYZE INDEX index_name VALIDATE STRUCTURE;get
查詢index_stats字典表,獲得索引碎片度:it
SELECT name, del_lf_rows/lf_rows*100 reclaimable_space_pct FROM index_stats;table
二、若是索引碎片度超過20%,能夠考慮重建索引效率
須要先檢查重建索引的表空間空間是否足夠;擴展
重建索引:date
alter index 用戶名.索引名 rebuild tablespace 表空間名 storage(initial 初始值 next 擴展值) nologging
若是不加tablespace參數,索引會重建到用戶默認表空間;
若是表空間空間不夠,沒法重建索引,能夠經過對索引進行整理來消除碎片:
若是空間不夠,能夠整理索引:
alter index用戶名.索引名 coalesce
三、表空間碎片整理
由於重建索引會刪除索引,對於較大的索引而言,會形成表空間碎片,因此重建索引後,能夠考慮整理表空間:
alter tablespace 表空間名 coalesce