走在專家的路上,每天一條SQL優化(3)
本係列分享的SQL優化實例,並不一定適用於所有相似SQL或所有場景。我們隻是介紹一種方法,當你再次遇到類似SQL,可以根據真實場景,選擇最適合的方案。另外,有疑問的時候,最好的辦法就是測試,動手才能找到最佳答案!
SQL文本如下:
SELECT NVL(SUM(SRE), 0) HRJE
FROM MD3U.CARD_INCOME A
WHERE YLGRZHH = '371081110630214389'
AND DDQCSRH IS NULL
AND ZDLSH IS NOT NULL
AND NVL(CGBZ, '0') = '1'
AND NOTEXISTS (SELECT 'x'
FROM MD3U.BILL_MID B
WHERE B.ZDLSH = A.ZDLSH
AND B.DM = 'hbry'
AND B.C = '2')
AND NOTEXISTS (SELECT 'x'
FROM MD3U.BILL_MID C
WHERE C.ZDLSH = A.ZDLSH
AND C.DM = 'hrzh'
AND C.C = '2');
執行計劃如下:
索引相關信息如下:
從上麵可以看到,該SQL的總執行時間為111,452,436毫秒(ms)大概30.95小時(h),總執行次數為295,420次,平均一天執行26856次,從而可以判定也是一個使用非常頻繁的SQL查詢。因為執行次數比較多,所以總時間也非常大,但是單次執行時間並不是很長,隻有大概0.37秒(s)。這個SQL還可以進行優化。
優化前,文本執行後的執行計劃:
建議創建索引的SQL如下:
CREATE INDEX MD3U.idx_KC20_01 ON MD3U.KC20(AAE072,BKE021,BKE004) ONLINE;
CREATE INDEX MD3u.idx_KZ03_01 ON
MD3U.KZ03(AAZ905,BKE163) GLOBAL ONLINE ;
創建索引後,文本執行後的執行計劃:
可以看到優化後,執行時間從原來的0.01秒(s)變為0.01秒(s),邏輯讀從原來的82變為17,執行時間上性能沒有提高,但是邏輯讀減少大概4.8多倍。
原文發布時間為:2017-09-27
作者: 雲和恩墨
本文來自雲棲社區合作夥伴“數據和雲”,了解相關信息可以關注“數據和雲”微信公眾號
最後更新:2017-09-27 15:34:21
上一篇:
基於Hadoop大數據分析應用場景與實戰
下一篇:
智能語音質檢係統如何做到深度跟蹤分析客戶
兩學一做,基於區塊鏈的智能合約技術
《數據結構與抽象:Java語言描述(原書第4版)》一2.2.1 可變大小數組
離線在CentOS上安裝CDH
Java ???????????? ??????????????? ??? ?????????Adapter?????? (???)-??????-????????????-?????????
為什麼 C 語言屹立不倒?
機房收費係統之上下機
大數據時代必修技能 阿裏HBase又放出了哪些大招?
Android開發技巧:在TextView控件中單擊鏈接彈出Activity
無線路由器與modem的IP衝突問題剖析及解決(家庭上網)
貴陽大數據交易所開創國內多個“之最”