我的一列只能包含 4 个可能的值(val1
、val2
、val3
、val4
)。
我需要在WHERE
子句中添加一个额外的过滤器来排除这 4 个值之一(即val4
)。
使用起来会更快吗NOT IN ('val4')
?IN ('val1','val2','val3')
我的一列只能包含 4 个可能的值(val1
、val2
、val3
、val4
)。
我需要在WHERE
子句中添加一个额外的过滤器来排除这 4 个值之一(即val4
)。
使用起来会更快吗NOT IN ('val4')
?IN ('val1','val2','val3')
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
您看到什么行为表明您在质疑使用的方法?
检查查询计划。如果 Val4 是非聚集索引,我敢打赌这两个计划都是索引搜索。
我在 = 和 <> 中进行了测试,而不是在其中进行了测试,它们都是相同的查询计划。
如果他们有相同的查询计划,我怀疑实际的性能差异是否足够大。但我仍然会选择单一值。
由于只有几个值,索引视图可能具有最佳性能。