Oracle中找出無用的索引提高DML效能

2021-04-17 03:15:54 字數 1075 閱讀 2438

2007-03-07 12:25

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

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

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

過程是相當簡單的。oracle9i有乙個工具能夠讓你使用alter index命令監視索引的使用。然後你可以查詢這些沒有使用的索引並從資料庫裡刪除它們。

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

quote:

set pages 999;

set heading off;

spoolrun_monitor.sql

select

'alter index '||owner||'.'||index_name||' monitoring usage;'

from

dba_indexes

where

owner not in ('sys','system','perfstat')

;spool off;

@run_monitor

你需要等待一段時間直到在資料庫上執行了足夠多的sql語句以後,然後你就可以查詢新的v$object_usage檢視。

quote:

select

index_name,

table_name,

mon,

used

from

v$object_usage;

在v$object_usage有一列被稱作used,它的值是yes或者no。不幸的是,它不會告訴你oracle使用了這個索引多少次,但是這個工具對於找出沒有使用的索引還是很有用的。

oracle效能優化操作九 遮蔽無用索引

繼續 oracle 效能優化操作八 的例子 由於實際查詢中,還有涉及到disposalcourseflag 6的查詢,而此時如果用上該字段上的索引,將是非常不明智的,效率也極低。因此這種情況下,我們需要用特殊的方法遮蔽該索引,以便oracle選擇其他欄位上的索引。比如,如果欄位為數值型的就在表示式的...

快速找出資料庫的效能問題之 缺失索引 無用的索引

我們通過減少查詢中的不必要的讀取操作從而使得查詢的效能得到提公升。乙個查詢在資料庫中執行的讀操作越多,那麼就對磁碟,cpu,記憶體的壓力越大。除非整個資料庫的資料全在在記憶體中,否則每次的讀操作都會把資料從磁碟讀入到記憶體中,然後返回。乙個查詢在讀取乙個資源的時候,通過加鎖會阻止其他的查詢對這個資源...

快速找出資料庫的效能問題之 缺失索引 無用的索引

我們通過減少查詢中的不必要的讀取操作從而使得查詢的效能得到提公升。乙個查詢在資料庫中執行的讀操作越多,那麼就對磁碟,cpu,記憶體的壓力越大。除非整個資料庫的資料全在在記憶體中,否則每次的讀操作都會把資料從磁碟讀入到記憶體中,然後返回。乙個查詢在讀取乙個資源的時候,通過加鎖會阻止其他的查詢對這個資源...