469
技術社區[雲棲]
走在專家的路上,每天優化一條SQL
本文講的走在專家的路上,每天優化一條SQL,為了讓大家更好地理解索引的常見和使用,我們揀選了工程師在客戶現場做的一些真實的SQL優化,基於真實的業務場景,與大家分享。
每天一條SQL優化,幫你走在專家的路上。
SQL文本:
SELECT 'x'
FROM MD3U.CARD_INFO A, MD3U.PERSON_INFO B
WHERE GBRQ IS NULL
AND NVL(KZT, '0') <> '0'
AND FFDSX = 'F'
AND A.RYID = B.RYID
AND ROWNUM <= 300
AND B.DQJBJGID = '37100501'
AND KH IS NOT NULL
執行計劃如下:
執行計劃統計信息如下:
索引相關信息如下:
從上麵可以看到,該SQL的總執行時間為336,973,478毫秒(ms)大概93.6小時(h),總執行次數為143,101次,平均一天執行大概13000次,從而可以判定是一個使用非常頻繁的SQL查詢。
因為執行次數比較多,所以總時間也非常大,單次執行時間大概2.3秒(s)。經下麵優化驗證從2.3秒改善為0.1秒,總執行時間會從93.6小時減少為0.1*143101/60/60 = 3.97小時左右。而且,與該SQL相似的SQL非常多,從排名中可以看到排名1、3的都與這個SQL相似。
所以隻要優化了這個SQL,相似的SQL都可以進行優化。
**建議創建索引的SQL如下:
CREATE INDEX md3u.KC47$AAZ198_AAC001 ON md3u.
KC47(AAZ198,AAC001) ONLINE;
CREATE INDEX md3u.AZ01$BKB004_AAZ512_AAZ500 ON
md3u.AZ01(AAC001,BKB004,AAZ512,AAZ500,AAZ502) ONLINE;
創建後,文本執行後的執行計劃:
可以看到最終優化後:
執行時間從原來的1.01秒(s)變為0.1秒(s)
邏輯讀從原來的143164變為37854
執行時間上性能提高10倍,邏輯讀減少3.7倍。
原文發布時間為:2017-09-25
作者: 雲和恩墨
本文來自雲棲社區合作夥伴“數據和雲”,了解相關信息可以關注“數據和雲”微信公眾號
最後更新:2017-09-27 15:04:58