性能優化之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,如需轉載請自行聯系原作者