mssql 數據庫“查詢處理器用盡了內部資源,無法生成查詢計划。”問題的處理


在項目中動態拼接sql語句,使用union all連接結果集,每個查詢語句都使用了in(幾百個數值)。語句如:

SELECT AA FROM T1 WHERE aa IN(1,2,3,4..............................)
UNION ALL
SELECT AA FROM T2 WHERE aa IN(1,2,3,4..............................)

當in和union all 很多時執行就會發生異常

”查詢處理器用盡了內部資源,無法生成查詢計划。這種情況很少出現,只有在查詢極其復雜或引用了大量表或分區時才會出現。請簡化查詢。如果您認為該消息的出現純屬錯誤,請與客戶支持服務部門聯系,了解詳細信息。“

解決方法:

使用臨時表把in語句改成EXISTS語句

CREATE TABLE #temp(id nvarchar(50))
INSERT INTO #temp(id) select 1  union select 2 union select 3 union select 4union select 5

SELECT AA FROM T1 WHERE EXISTS (SELECT 0 FROM #temp WHERE id=T1.aa)
UNION ALL
SELECT AA FROM T2 WHERE EXISTS (SELECT 0 FROM #temp WHERE id=T1.aa)

DROP TABLE #temp;

性能改善:

修改前執行57秒報錯,修改后14秒出結果,效果還是很明顯的.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM