延續該筆記 - [SQL] Like - sp_executesql,平常確認派工相關商業邏輯時,都是依靠 [未結案非叢集索引] 來限制資料,心理一直有個執念,執行計畫就是要從它開始才是,所以有測試過下列方式企圖來改變
- 強制指定 [未結案非叢集索引] 來跑,有點意外竟然沒有用
- 加入條件來變化 SARG,有成功但執行計畫增加 1 %
WHERE 單號 like LIKE 'B_____12345%'
AND 單號 > '' -- 加入該條件
改變後執行計畫從 operator 可以看到 Predicate 是 like 單號條件,但 Seek Predicate 是[單號大於空值]
- 心血來潮用 Parameter Sniffering Local Variable,結果跑出很糟糕的統計數字和執行計畫
EXEC sp_executesql N'
DECLARE @內部派工參數 AS char(11) = @外部派工參數
DECLARE @內部結案參數 AS char(1) = @外部結案參數
SELECT 欄位
FROM 資料表名稱
WHERE 單號 like @內部派工參數 + ''%'')
AND 是否結案 = @內部結案參數 ) '
,N'@外部單號參數 char(11),@外部結案參數 char(1)'
,@外部單號參數 = 'B_____12345'
,@內部結案參數 = ''
以前沒有在看 operator 上的數字,有也是轉過去 Plan Explorer 上觀察,看哪一個 operator 被顯示為紅色,表示成本較高而以,這次是真的這破百數字太顯著引起注意,原來 SSMS 上會把 operator 的 [實際資料列數目] 和 [估計的資料列數目] 打在上面並計算出百分比
沒有留言:
張貼留言