某客戶複雜查詢(涉 12 張表)建立索引後,I/O 銳減但執行時間卻從 8 秒飆升至 20 秒。經分析發現:優化器因統計資訊步長導致估計行數偏差(實際 1.5 萬行 vs 估計 800 行),選擇了 Loop Join 且放棄平行執行,導致效能倒退。
因查詢在預存程序中,直接加入 OPTION (QUERYTRACEON 8649) 提示,強制將平行執行門檻降為 0,查詢時間從 20 秒降至 5 秒(對比 Hash Join 提示的 7 秒)。
以 AdventureWorks 範例資料庫為例:
-- 原始查詢,預設不走平行
SELECT *
FROM [AdventureWorks].[Sales].[SalesOrderDetail] a
INNER JOIN [Sales].SalesOrderHeader b ON a.SalesOrderID = b.SalesOrderID;
執行計畫顯示為序列執行(圖 1)。

圖 1. 原始執行計畫(序列)
加入提示後:
SELECT *
FROM [AdventureWorks].[Sales].[SalesOrderDetail] a
INNER JOIN [Sales].SalesOrderHeader b ON a.SalesOrderID = b.SalesOrderID
OPTION (QUERYTRACEON 8649);
執行計畫轉為平行模式(圖 2),效能顯著提升。

圖 2. 加入提示後的平行執行計畫
面對複雜 DSS/OLAP 查詢遇到類似情況,可嘗試此 Undocumented 提示強制平行化,但需謹慎測試,避免濫用導致資源爭用。