1

我的一列只能包含 4 个可能的值(val1val2val3val4)。

我需要在WHERE子句中添加一个额外的过滤器来排除这 4 个值之一(即val4)。

使用起来会更快吗NOT IN ('val4')IN ('val1','val2','val3')

4

2 回答 2

4

NOT IN ('val4')基本上相当于

WHERE
    NOT (column = 'val4') /* or column <> 'val4' */

IN ('val1', 'val2', 'val3')基本上相当于

WHERE
(
   column = 'val1'
   OR
   column = 'val2'
   OR 
   column = 'val3'
)

我希望第一个选项更快,即使可以忽略不计。SQL 引擎可能会根据您在函数中指定的值数量以及表上可用的索引进行IN不同的优化。IN您看到什么行为表明您在质疑使用的方法?

于 2013-07-11T22:05:14.560 回答
1

检查查询计划。如果 Val4 是非聚集索引,我敢打赌这两个计划都是索引搜索。
我在 = 和 <> 中进行了测试,而不是在其中进行了测试,它们都是相同的查询计划。
如果他们有相同的查询计划,我怀疑实际的性能差异是否足够大。但我仍然会选择单一值。

由于只有几个值,索引视图可能具有最佳性能。

于 2013-07-11T22:12:02.250 回答