閱讀469 返回首頁    go 技術社區[雲棲]


走在專家的路上,每天優化一條SQL

本文講的走在專家的路上,每天優化一條SQL,為了讓大家更好地理解索引的常見和使用,我們揀選了工程師在客戶現場做的一些真實的SQL優化,基於真實的業務場景,與大家分享。


image


每天一條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

執行計劃如下:


image


執行計劃統計信息如下:


image

索引相關信息如下:


image


從上麵可以看到,該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都可以進行優化。

**優化前,文本執行後的執行計劃:

image


**建議創建索引的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;

創建後,文本執行後的執行計劃:


image

可以看到最終優化後:

執行時間從原來的1.01秒(s)變為0.1秒(s)
邏輯讀從原來的143164變為37854
執行時間上性能提高10倍,邏輯讀減少3.7倍。

原文發布時間為:2017-09-25
作者: 雲和恩墨
本文來自雲棲社區合作夥伴“數據和雲”,了解相關信息可以關注“數據和雲”微信公眾號

最後更新:2017-09-27 15:04:58

  上一篇:go  走在專家的路上,每天一條SQL優化(2)
  下一篇:go  GTC大會上“省錢”不亦樂乎,阿裏雲GPU人臉識別實在好玩!