清除Oracle中無用索引 改善DML效能

來源:互聯網
上載者:User

DML效能低下,其中最嚴重的原因之一是無用索引的存在。所有SQL的插入,更新和刪除操作在它們需要在每一行資料被改變時修改大量索引的時候會變得更慢。

許多Oracle 管理員只要看見在一個SQL 查詢的WHERE語句出現了一列的話就會為它分配索引。雖然這個方法能夠讓SQL運行得更快速,但是基於功能的Oracle 索引使得資料庫管理員有可能在資料表的行上資源過度分派索引。資源過度分派索引會嚴重影響關鍵Oracle 資料表的效能。

在Oracle9i出現以前,沒有辦法確定SQL查詢沒有使用的索引。讓我們看看Oracle9i提供了什麼樣的方法讓你找到這些索引並刪除它們。

過程是相當簡單的。Oracle9i有一個工具能夠讓你使用ALTER INDEX命令監視索引的使用。然後你可以尋找這些沒有使用的索引並從資料庫裡刪除它們。

下面是一段指令碼,它能夠開啟一個系統中所有索引的監視功能:

set pages 999;set heading off;spoolrun_monitor.sqlselect  'alter index '||owner||'.'||index_name||' monitoring usage;'from   dba_indexeswhere   owner not in ('SYS','SYSTEM','PERFSTAT');spool off;@run_monitor

你需要等待一段時間直到在資料庫上運行了足夠多的SQL語句以後,然後你就可以查詢新的V$OBJECT_USAGE視圖。

select   index_name,   table_name,   mon,   usedfrom   v$object_usage;

在V$OBJECT_USAGE有一列被稱作USED,它的值是YES或者NO。不幸的是,它不會告訴你Oracle使用了這個索引多少次,但是這個工具對於找出沒有使用的索引還是很有用的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.