TSQL-对于小列表,在(列表)中使用或不在(列表)中使用更快?

TSQL-对于小列表,在(列表)中使用或不在(列表)中使用更快?,sql,tsql,sqlperformance,notin,sql-in,Sql,Tsql,Sqlperformance,Notin,Sql In,我的一列只能包含4个可能的值val1、val2、val3、val4 我需要在WHERE子句中添加一个额外的过滤器,以排除这4个值中的一个,即val4 不在‘val4’或‘val1’、‘val2’、‘val3’中使用会更快吗?不在‘val4’中基本等同于 WHERE NOT (column = 'val4') /* or column <> 'val4' */ WHERE ( column = 'val1' OR column = 'val2' OR

我的一列只能包含4个可能的值val1、val2、val3、val4

我需要在WHERE子句中添加一个额外的过滤器,以排除这4个值中的一个,即val4

不在‘val4’或‘val1’、‘val2’、‘val3’中使用会更快吗?

不在‘val4’中基本等同于

WHERE
    NOT (column = 'val4') /* or column <> 'val4' */
WHERE
(
   column = 'val1'
   OR
   column = 'val2'
   OR 
   column = 'val3'
)
我希望第一种选择更快,如果可以忽略不计的话。根据在IN函数中指定的值的数量以及表中可用的索引,SQL引擎可能会以不同的方式优化IN。您看到的是什么行为,您正在质疑要使用的方法?

不在'val4'中基本等同于

WHERE
    NOT (column = 'val4') /* or column <> 'val4' */
WHERE
(
   column = 'val1'
   OR
   column = 'val2'
   OR 
   column = 'val3'
)

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

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


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

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


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

我通常只使用!=,但我想我已经读了很多书,所以它并不总是最好的选择,而且可能会导致性能问题。不过你说的很有道理。只是寻找我可能缺少的任何其他见解。我通常只会使用!=,但我想我已经读了很多书,所以它并不总是最好的选择,而且可能会导致性能问题。不过你说的很有道理。只是在寻找我可能缺少的任何其他见解。