SQLServer效能優化之改寫SQL語句

bq_wang發表於2010-07-28
效能優化之SQL語句改寫
有這樣一條SQL,在系統效能檢視中顯示執行時間30秒,單獨拿出來執行時間6秒
SELECT *
  FROM TABLEA
 WHERE COND1 AND (A.FIELD2<>6 AND A.FIELD1 NOT IN (SELECT REPLACE(FIELD1,'Y','') FROM TABLEB WHERE ...)
        OR
        A.FIELD2=6 AND A.FIELD1 NOT IN (SELECT FIELD1 FROM TABLEB WHERE ...)                                  
       )
 ORDER BY 1
優化步驟
首先把COND1之前的語句拿出來執行約0秒  
其次分別執行每個單獨的子查詢(NOT IN中的子查詢)語句也是0秒
再次把OR的語句分別執行,發現執行速度均是0秒
分析問題可能出現在兩個子查詢的合併上,乾脆直接把SQL語句改寫成兩個獨立的語句再進行UNION試試看,如下格式
SELECT * FROM
(
  SELECT * FROM TABLEA WHERE COND1 AND A.FIELD2<>6 AND A.FIELD1 NOT IN (SELECT REPLACE(FIELD1,'Y','') FROM TABLEB WHERE ...)
  UNION
  SELECT * FROM TABLEA WHERE COND1 AND A.FIELD2=6 AND A.FIELD1 NOT IN (SELECT FIELD1 FROM TABLEB WHERE ...)
)A
ORDER BY 1  
執行後0秒,OK!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-669724/,如需轉載,請註明出處,否則將追究法律責任。

相關文章