資料庫統計資訊不更新導致的效能問題
SQL如下,系統動態生成的,主要是檢視符合多個條件付款對應的所有明細記錄。語句本身有問題,因為,多個in可以合併成一個in,相關的條件and起來即可,這個暫時忽略。
SELECT doc.* FROM TLK_PAYMENT_DETAIL doc
WHERE ISTMP=0 AND (((((((ITEM_contractnumber = '06603833'))
AND (doc.parent in (select parentdoc.id from TLK_TEPAYMENT_MAIN parentdoc where parentdoc.ITEM_單據型別 IN ('4','8'))))
AND (doc.parent in (select parentdoc.id from TLK_TEPAYMENT_MAIN parentdoc where parentdoc.ITEM_IsReverse = '0')))
AND (doc.parent in (select parentdoc.id from TLK_TEPAYMENT_MAIN parentdoc where parentdoc.stateint = 1048576)))
AND (doc.parent in (select parentdoc.id from TLK_TEPAYMENT_MAIN parentdoc where parentdoc.istmp <> 1)))
AND ((ITEM_expensecode = '33000100')))
執行計劃: (第4步是一個笛卡爾集!)
-----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
-----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 1 (100)|
| 1 | NESTED LOOPS | | 1 | 20853 | 0 (0)|
| 2 | NESTED LOOPS | | 1 | 20338 | 0 (0)|
| 3 | NESTED LOOPS | | 1 | 19823 | 0 (0)|
| 4 | MERGE JOIN CARTESIAN | | 1 | 2008 | 0 (0)|
| 5 | TABLE ACCESS BY INDEX ROWID | TLK_TEPAYMENT_MAIN | 1 | 1004 | 0 (0)|
|* 6 | INDEX SKIP SCAN | TLK_TEPAYMENT_MAIN_06 | 1 | | 0 (0)|
| 7 | BUFFER SORT | | 1 | 1004 | 0 (0)|
| 8 | INLIST ITERATOR | | | | |
| 9 | TABLE ACCESS BY INDEX ROWID| TLK_TEPAYMENT_MAIN | 1 | 1004 | 0 (0)|
|* 10 | INDEX RANGE SCAN | TLK_TEPAYMENT_MAIN_06 | 1 | | 0 (0)|
|* 11 | TABLE ACCESS BY INDEX ROWID | TLK_PAYMENT_DETAIL | 1 | 17815 | 0 (0)|
|* 12 | INDEX RANGE SCAN | TLK_TEPAYMENT_DETAIL_INDEX | 1 | | 0 (0)|
|* 13 | TABLE ACCESS BY INDEX ROWID | TLK_TEPAYMENT_MAIN | 1 | 515 | 0 (0)|
|* 14 | INDEX UNIQUE SCAN | SYS_C006361 | 1 | | 0 (0)|
|* 15 | TABLE ACCESS BY INDEX ROWID | TLK_TEPAYMENT_MAIN | 1 | 515 | 0 (0)|
|* 16 | INDEX UNIQUE SCAN | SYS_C006361 | 1 | | 0 (0)|
-----------------------------------------------------------------------------------------------------
思考了一下,為什麼系統選擇產生笛卡爾集?笛卡爾集未必是壞事,對小的結果集,這種操作還會省時間,但這裡,對兩個大的結果集產生笛卡爾集,說明系統認為這兩個大的結果集"不大",也就是說系統的統計資訊有誤,呼叫dbms_stats相關的函式gether statistics即可
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/136097/viewspace-1003464/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫導致效能問題的可能原因Oracle資料庫
- memlock過低導致的資料庫效能問題資料庫
- TSM配置不好導致備份不正常,從而導致資料庫效能問題資料庫
- expdp不導資料而匯出統計資訊導致統計資訊鎖定(ORA-20005)
- 使用impdp不當導致的資料丟失問題
- 資料庫遷移後的統計資訊更新資料庫
- 執行計劃的偏差導致的效能問題
- 資料庫預設安裝配置導致的問題資料庫
- Chrome89針對sessionStorage的更新導致資料共享問題ChromeSession
- 優化由直方圖資訊導致的sql效能問題優化直方圖SQL
- memory_target設定不當導致資料庫無法啟動的問題資料庫
- 完美的執行計劃導致的效能問題
- 使用資料庫處理併發可能導致的問題資料庫
- 歸檔問題導致的資料庫無法啟動資料庫
- JPA 二級快取 網路多播協議導致的資料庫效能問題快取協議資料庫
- 錯誤的使用者名稱密碼登入導致的資料庫效能問題密碼資料庫
- 資料庫效能調優之始: analyze統計資訊資料庫
- DNS導致資料庫登入緩慢的問題解決DNS資料庫
- MySQL8.0 view導致的效能問題MySqlView
- 資料庫同步更新問題?資料庫
- ORACLE資料檔名導致的奇怪問題Oracle
- oracle 資料庫光纖卡出問題導致檔案系統I/OERROROracle資料庫Error
- 物化檢視中的統計資訊導致的查詢問題分析和修復
- SCHEDULER呼叫XDB程式導致效能問題
- ORACLE analyse table方式收集表統計資訊導致SQL執行計劃不準確而效能下降OracleSQL
- 統計資訊不準確導致執行計劃走了笛卡爾積
- oracle刪除datafile導致資料庫打不開Oracle資料庫
- 快取穿透導致資料庫效能不穩定快取穿透資料庫
- private內聯網路卡效能不良導致的系統的問題
- 列上"資料特殊"、優化器統計資訊的問題導致死活不走index診斷、調整過程優化Index
- 有問題的mybatis的sql導致對資料庫進行了批量的修改MyBatisSQL資料庫
- ORA-01034,修改主機名導致的資料庫問題資料庫
- 一條sql語句導致的資料庫當機問題及分析SQL資料庫
- 一條sql語句“導致”的資料庫當機問題及分析SQL資料庫
- 系統和資料庫LANG不一致的問題資料庫
- 記一次:歸檔檔案系統問題導致資料庫hang處理資料庫
- jive 問題 如何在jsp頁面實現資料庫資訊的更新??JS資料庫
- PLSQL不規範的引數命名導致的問題SQL