一個簡單的delete 最佳化
昨天在客戶現場,同事一個簡單的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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一些常見的簡單最佳化
- 最佳化兩個簡單的巢狀迴圈巢狀
- 一個簡單的 PWA 指南
- 一個簡簡單單的紅點系統框架框架
- 一個簡單的載入動畫(一)動畫
- Go的第一個Hello程式 簡簡單單 - 快快樂樂Go
- 一次資料庫的簡單效能最佳化資料庫
- MySQL簡單最佳化MySql
- 分享一個簡單的redis限流Redis
- 一個簡單的 Amqp 封裝MQ封裝
- 一個簡單的區塊鏈區塊鏈
- 擼一個簡單的MVVM例子MVVM
- 一個簡單的MVP模式案例MVP模式
- 一個簡單的自定義Collection
- 一個簡單的守護程式
- 一個簡單的sql稽核案例SQL
- 一個簡單的樹查詢
- 一個簡單的解密程式 (轉)解密
- 建立一個簡單的小程式
- Oracle中,一個Delete操作的流程Oracledelete
- 一個簡單的iptable的應用
- 簡單寫一個eventbus
- 一個封裝簡單使用簡單的雷達檢視封裝
- 對擁有一個幾十萬行表的MySQL效能最佳化的簡單辦法(轉)MySql
- 對擁有一個幾十萬行表的 MySQL 效能最佳化的簡單辦法(轉)MySql
- C ++ 向量:一個非常簡單的指南
- OAuth 2.0 的一個簡單解釋OAuth
- 一個簡單易用高效的工具庫
- php實現一個簡單的socketPHP
- 手寫一個超簡單的VueVue
- 實現一個簡單的TomcatTomcat
- 實現一個簡單的 RESTful APIRESTAPI
- Laravel 一個簡單的除錯工具Laravel除錯
- 一個很簡單的PHP框架lyuePHP框架
- GO語言一個簡單的工程Go
- 一個超簡單的Microsoft Edge ExtensionROS
- 一個最簡單的 Github workflow 例子Github
- [譯]ViewModels:一個簡單的示例View