上線系統出現主鍵查詢卻耗時 10~18 秒,排除硬體、鎖定、索引碎片後,鎖定為動態 SQL 產生的執行計畫不穩定問題。
WHERE a.AVAILABLE = 'Y'
AND (a.CWB_NO = @CWB_NO OR
(@CWB_NO IS NULL AND a.AWB_NO = @AWB_NO OR @AWB_NO IS NULL)
AND (a.BWB_NO = @BWB_NO OR @BWB_NO IS NULL)
... 多個選擇性條件 ...)
OR @Param IS NULL 涵蓋所有查詢組合。OR @Param IS NULL 邏輯。WHERE AVAILABLE = 'Y' 篩選索引。SET STATISTICS XML ON) 對比估算/實際資料列。sys.dm_exec_query_stats 找出高 CPU/IO/持續時間查詢。DBCC FREEPROCCACHE (謹慎) 或 sp_recompile 觀察重編譯後表現。「一個查詢打天下」的動態 SQL 往往是效能殺手。拆分查詢路徑、善用重編譯提示、精確建構動態 SQL,配合持續統計資料維護,才能穩定高效能。