SQL Not Equal 的效能影響

January 14, 2023

在 SQL 中,可用 <> 找出不等於特定值的資料,可是當有很多資料時,它的效能可能不如 =IN 來得好。

內文

在 SQL 中,在條件式中用 <> 運算子,可找出不等於特定值的資料,並且也是 SARGable 的運算子之一,這表示它可以運用索引減少查詢的時間。

然而,在 Sargable - Wikipedia 中,<> 被歸類在「Sargable operators that rarely improve performance」,對此也有網友在 sql - Is <> SARGable or not? If not, what can I use instead? - Stack Overflow 提問,下方有網友提出的解答:

使用 = 的話,通常只需要從索引中取得單一或有限的資料,但 <> 通常會需要掃描整個索引,以取得相關的資料,因此效能幫助不如其他運算子來得多。

Avoid Using Not Equal in WHERE Clause 這篇文章內可以看到,在同樣的查詢,只調整運算子,但查詢效果相同的語法,使用 <>IN 都會去掃描索引。但是使用 <> 的查詢語法,明顯花了較多的成本去尋找索引,導致查詢速度較慢。

因此,應減少 <> 的使用,並考慮用其它運算子替代。