星期五, 8月 10, 2018

[SQL] 避免使用不等於

SARG 的一個原則 - 避免使用否定語法,EX:<>,調校時剛好有用上,記錄一下

[F1.工序結案數量 <> S1.派工數量] 是關鍵條件,剛好了解這條件商業邏輯,派工單各工序數量不等於派工單數量情況,換句話說就是,各工序數量小於派工數量的情況,擔心誤會還特定跟同事確認,應該不太可能會有各工序完工數量,超過派工數量的情況才對
SELECT
	..................
FROM
	..................
	JOIN [派工工序 Table] AS F1 ON D.派工單號 = F1.派工單號
			AND D.派工工序 = F1.派工工序
			AND F1.工序結案數量 <> S1.派工數量 -- 關鍵條件
條件修正
---- 原語法
F1.工序結案數量 <> S1.派工數量
----- 了解商業邏輯情況下改為
F1.工序結案數量 < S1.派工數量
----- 完全不懂商業邏輯下會改為
F1.工序結案數量 < S1.派工數量 OR F1.工序結案數量 > S1.派工數量
上述兩種改法都是可以得到相同結果,Statistics 雖然沒有甚麼變化,執行計劃成本降低不少

[SQL] 避免使用不等於

沒有留言:

張貼留言