差:WHERE -col1 = 5
好:WHERE col1 = -5
原因:欄位端運算導致索引失效,掃描全表計算後再比對。
差:WHERE col_int = '2' (字串比數值)
好:WHERE col_int = 2
原因:隱含轉換雙方為浮點數再比較,索引同樣失效。
差:WHERE DATEDIFF(day, col_dt, GETDATE()) = 0
好:WHERE col_dt >= '2009-10-26' AND col_dt < '2009-10-27'
原因:函數讓索引無法求值,改用範圍查詢可用索引 Seek。
差:WHERE a = 1 OR b = 2 (易觸發全表掃描)
好:WHERE a = 1 UNION ALL WHERE b = 2 (視索引情況)
原因:OR 往往阻礙索引使用,改寫為 UNION 讓各分支獨立最佳化。