第 25 天,希望大家連假過得愉快 ~
在 SQL 中,在條件式中用 <>
(Not Equal) 運算子,可找出不等於特定值的資料。
其實 <>
是 SARGable 的運算子之一,這表示它可以運用索引減少查詢的時間。不過在 Sargable - Wikipedia 中,<> 被歸類在「Sargable operators that rarely improve performance」。
不少的 SQL 效能改進的文章都會提到避免使用 <>
進行查詢,避免效能的減損,但 Wikipedia 上只有比較簡單的說明。為了更瞭解 <>
運算子對效能的影響,上網搜尋的相關資料,查詢到網友的 sql - Is <> SARGable or not? If not, what can I use instead? - Stack Overflow 提問,下方有網友提出的解答:
使用 = 的話,通常只需要從索引中取得單一或有限的資料,但 <> 通常會需要掃描整個索引,以取得相關的資料,因此效能幫助不如其他運算子來得多。
Avoid Using Not Equal in WHERE Clause 這篇文章內可以看到,在同樣的查詢,只調整運算子,但查詢效果相同的語法,使用 <>
或 IN
都會去掃描索引。但是使用 <>
的查詢語法,明顯花了較多的成本去尋找索引,導致查詢速度較慢。
因此,應減少 <>
的使用,並考慮用其它運算子替代。