SQL Server Not(A = B和C = D)vs(A< B&B&C> D)

时间:2016-01-16 13:49:12

标签: sql sql-server

我有一个关于平等和不平等的简单的表现相关问题。根据过去的经验,我了解到任何Eq条件都能更好地工作,或者条件会导致一些性能问题。

当我查看两者的查询计划时,并排执行时都有扫描类型的EQ

做了同样的查询计划。如果我的查询格式为NOT(A=B and C=D)或只使用(A <> B or C<> D)

,它会有所作为吗?

最好的方法是什么?

这里没有想到空值,但这里有区别。

SELECT 1 WHERE NOT(2=1 AND NULL=2)
SELECT 1 WHERE NOT(2=1 AND 3=NULL)
SELECT 1 WHERE NOT(2=1 AND NULL=2)
SELECT 1 WHERE NOT(1=1 AND 3=NULL)
SELECT 1 WHERE NOT(NULL=1 AND 2=2)
SELECT 1 WHERE NOT(NULL=null AND 2=2)   --Point to note is his one. False, True
SELECT 1 WHERE NOT(1=1 AND 3=3)

SELECT 1 WHERE (2<>1 OR NULL<>2)
SELECT 1 WHERE (2<>1 OR 3<>NULL)
SELECT 1 WHERE (2<>1 OR NULL<>2)
SELECT 1 WHERE (1<>1 OR 3<>NULL)
SELECT 1 WHERE (NULL<>1 OR 2<>2)
SELECT 1 WHERE (NULL<>null or 2=2)      --Point to note is his one. True, True
SELECT 1 WHERE (1<>1 OR 3<>3)

1 个答案:

答案 0 :(得分:2)

对于简单的比较,我希望这些具有相同的执行计划。 OR往往会阻止使用索引。但是,索引不太可能用于非等号。