天天看點

SQLServer性能優化之改寫SQL語句

性能優化之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!

本文轉自baoqiangwang51CTO部落格,原文連結:http://blog.51cto.com/baoqiangwang/362064,如需轉載請自行聯系原作者