【TUNE_ORACLE】索引定期重建的利與弊
索引必須定期重建嗎?
先來看看一些大部分人認為需要定期重建的理由:
1. 索引碎片會越來越多,而且這些碎片會被重複利用
2. B樹索引會隨著時間越來越不平衡
3. 索引聚簇因子隨著時間會變得不同步
4. 刪除索引後的空間不會被繼續利用
除了第一條正確,其他三條理由都不正確,因為絕大多數情況下,是不需要重建B樹索引的,B樹索引一般能夠自動管理和自動平衡。下面來分析每條的實際情況及原因:
第一條:DML操作會導致索引塊附近的可用空間形成碎片,但這些碎片會被重複使用,建議不要在有索引的列上進行頻繁DML操作,以減少碎片
第二條:B樹索引會自動平衡
第三條:聚簇因子只能透過重組表中資料來改變
第四條:和第一條一樣,索引空間依然能被重複利用
什麼時候需要考慮重建索引?
1. 索引深度最好不要超過3級,否則重建。但是如果索引超過了3級但是深度不再發生變化,就不需要重建
2. 查詢INDEX_STATS的DEF_LF_ROWS與LF_ROWS的比值如果大於0.2(表示刪除的索引條目佔索引總條目的20%),或者BLKS_GETS_PER_ACCESS大於10,就需要重建索引
具體操作如下:
SQL> ANALZE INDEX XXX VALIDATE STRUCTURE; --必須執行索引分析這一步,不然查不出結果
SQL> select HEIGHT, DEF_LF_ROWS/ LF_ROWS , BLKS_GETS_PER_ACCESS from INDEX_STATS;
注:“ANALZE INDEX XXX VALIDATE STRUCTURE”對於分析空間佔用大的索引時會對業務產生巨大影響,因為在執行期間不允許DML操作,並且需要消耗額外時間(不會鎖表)
可能產生的影響
重建索引會導致redo工作量進一步增加,導致真個DB效能產生一定影響。雖然重建索引會使得索引塊更加集中,但是會隨著DML操作的增多導致碎片增多,因此索引在每次DML後,為了達到索引平衡,會重新分割索引來調整索引結構,需要佔用I/O和CPU資源,並且經過一段時間後,該索引會繼續被標記成“REBUILD”,需要繼續重建。所以,強烈建議使用索引預設的自平衡機制,而不是定期重建索引。
一般使用索引合併來取代索引重建,理由如下:
1. 佔用空間小
2. 只會合併索引塊,而不是去重建索引導致索引結構改變
總結
強烈不建議定期重建索引,並且不建議對含有索引的列進行頻繁DML操作!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2765192/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL開啟SSL的利與弊MySql
- 結對程式設計的利與弊程式設計
- 匿名類 與 索引重建索引
- 如何看待電話機器人的利與弊?機器人
- 在Steam商店,“搶先體驗”模式的利與弊模式
- 重建索引索引
- 索引重建索引
- 【虹科乾貨】無模式資料庫的利與弊模式資料庫
- 清理重建失敗的索引索引
- SQL Server 2014的重建索引SQLServer索引
- oracle重建索引(一)Oracle索引
- oracle重建索引(三)Oracle索引
- oracle重建索引(二)Oracle索引
- MSSQL Rebuild(重建)索引SQLRebuild索引
- War Robots首席設計師:遊戲內活動的利與弊遊戲
- Python淺析:Python變數作為配置檔案格式的利與弊Python變數
- 程式設計師入門選擇書籍學習的利與弊程式設計師
- 28萬的特斯拉修20萬!一體壓鑄工藝的“利”與“弊”
- 教你如何在 elasticsearch 中重建索引Elasticsearch索引
- HugeGraph之索引重建和刪除索引
- 如何在Mac上重建Spotlight索引Mac索引
- sqlserver索引重建和索引重組的區別和操作方法SQLServer索引
- ELK日誌定期清理 ES索引資料索引
- 重建索引報ORA-14086錯誤索引
- 【SQL】Oracle資料庫通過job定期重建同步表資料SQLOracle資料庫
- 【TUNE_ORACLE】Oracle索引設計思想(四)三星級索引Oracle索引
- 【TUNE_ORACLE】Oracle索引設計思想(二)索引過濾列概述Oracle索引
- 【TUNE_ORACLE】Oracle索引設計思想(三)過濾因子概述與計算Oracle索引
- 【TUNE_ORACLE】Oracle索引設計思想(一)索引片和匹配列概述Oracle索引
- 新手必看:如何在Mac上重建Spotlight索引Mac索引
- 【TUNE_ORACLE】列出索引被哪些SQL引用的SQL參考Oracle索引SQL
- 【TUNE_ORACLE】檢視索引的叢集因子SQL參考Oracle索引SQL
- 為什麼我建議需要定期重建資料量大但是效能關鍵的表
- 一文讀懂:本地資料湖丨資料倉儲丨雲資料湖的利與弊
- 【TUNE_ORACLE】你建立的索引為什麼不工作了?(一)Oracle索引
- 【TUNE_ORACLE】你建立的索引為什麼不工作了?(三)Oracle索引
- 【TUNE_ORACLE】你建立的索引為什麼不工作了?(二)Oracle索引
- LOB欄位相關概念(自動建立LOB索引段和重建索引方法)索引