前幾天發現系統變得很慢,在Profiler里面發現有的SQL執行了幾十秒才返回結果,當時的SQL如下:
?
可以看得出來,在652行用了子查詢,恰巧目標表(QS_WIP)中的記錄數為100000000+,通過如下SQL可以得到:
SELECT ROWS FROM SYSINDEXES WHERE ID=OBJECT_ID('QS_WIP') AND INDID <2
大量的數據導致子查詢的效率非常慢,應用系統一度提示"time out",經過優化,改為如下寫法,執行效率明顯提升:
?
先將子查詢里面的內容提取出來作為一個臨時表,再次join的時候就快了。