Cost Threshold for Parallelism(預設 5,單位為內部成本估算值,非秒)Max Degree of Parallelism (MAXDOP)
某些 SQL 寫法會導致原本可並行的查詢退化為串行,嚴重影響效能。
-- 原始查詢:並行執行,8 執行緒,130ms
SELECT * FROM LargeTable WHERE CreateDate > '2015-01-01';
-- 建立無實質邏輯的函數
CREATE FUNCTION Fn_JustFunction(@D DATE) RETURNS DATE AS BEGIN RETURN @D END;
-- 修改條件:CreateDate > dbo.Fn_JustFunction('2015-01-01')
-- 結果:串行執行,單 CPU 80%,4000ms(慢 30 倍)

SELECT * FROM TableA A INNER JOIN TableB B ON A.Id = B.Id AND A.Col = dbo.Func(@Var) WHERE ...;
同樣導致並行抑制。
-- 查詢條件
DECLARE @Dt DATE = dbo.Fn_JustFunction('2015-01-01');
SELECT * FROM LargeTable WHERE CreateDate > @Dt; -- 恢復並行
-- 連接條件
DECLARE @Val INT = dbo.Func(@Var);
SELECT * FROM TableA A
INNER JOIN TableB B ON A.Id = B.Id AND A.Col = @Val
WHERE ...;
OPTION (RECOMPILE) 獲取參數值後的最佳計劃(參數嗅探場景)並行查詢能充分利用多核 CPU,但查詢條件/連接條件直接使用函數會導致優化器退守串行。解決核心:**預先計算 → 變數/參數傳入**。SQL 優化需兼顧索引使用與並行決策,細節決定成敗。