好的,我有一个查询:
select distinct(a)
from mytable
where
b in (0,3)
上述代码和下面这段哪个更快?
select distinct(a)
from mytable
where
b = 0
or
b = 3
有没有通用的规则?
谢谢。
好的,我有一个查询:
select distinct(a)
from mytable
where
b in (0,3)
上述代码和下面这段哪个更快?
select distinct(a)
from mytable
where
b = 0
or
b = 3
有没有通用的规则?
谢谢。
使用IN
和OR
都会查询b = 0
和b = 3
,然后在两个结果集上进行合并连接,最后过滤掉任何重复项。
对于IN
,重复项实际上没有意义,因为b
不能同时是0
和3
,但事实上IN
将被转换为b = 0 OR b = 3
,而对于OR
,重复项是有意义的,因为您可能会有b = 0 OR a = 3
,如果您要连接这两个单独的结果集,则可能会出现每个匹配两个条件的记录的重复项。
因此,无论您使用IN
还是OR
,始终会进行重复项过滤。但是,如果您从一开始就知道不会有任何重复项-通常情况下使用IN
-则可以通过使用不过滤重复项的UNION ALL
来提高性能:
select distinct(a)
from mytable
where
b = 0
UNION ALL
select distinct(a)
from mytable
where
b = 3
IN
转换为 OR
。因此性能是相同的。只是一种更简洁的写法。mytable
上有哪些索引。建议你在打开“包括实际执行计划”之后,在Sql Server Management Studio中运行两个查询并比较结果,以确定哪个查询在你的场景中具有最低的“成本”。