一個簡單的delete 最佳化

jidongzheng發表於2009-01-06

昨天在客戶現場,同事一個簡單的delete 語句,發現竟需要30s以上的時間,整個資料庫資源佔用也很高。

同事講,對應的列已經建立索引了。

就檢查了下。發現存在一個普遍的設計問題。

具體如下:

[@more@]

刪除語句:

delete from t_a t where t.id= 40000;

檢查表t_a,在id上建立了索引。

執行計劃也會使用這個索引。但執行起來就很慢。

剛開始以為這個索引的值分散,就把索引修改為反向索引。

執行計劃是比一般索引快。但總的執行時間沒有減少太多。

只好去設定sql trace.

結果發現,當執行上述delete 時,除刪除t_a外,還有一個刪除

t_b表的語句。

所以,明白是由於這個表是其它表的主表。因為,當刪除主表時,會級聯刪除次表。導致刪除慢。

在次表上對應的column上建立索引,整個刪除只需要1s就可以完成。

從此,也可以看出在使用關聯時,不應只關注主表,次表也是要注意的。

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

相關文章