小编典典

sql server'in'或'or'-最快

sql

好的,所以我有一个查询:

select distinct(a)
from mytable
where
b in (0,3)

以上将会更快,或者

select distinct(a)
from mytable
where
b = 0
or
b = 3

有一般规则吗?

谢谢


阅读 323

收藏
2021-03-23

共1个答案

小编典典

双方INOR会做一个查询b = 0,接着一个b = 3,然后做一个合并连接的两个结果集,最后筛选出任何重复。

使用IN,重复项并没有真正的意义,因为b不能同时使用03,但是事实是IN将重复转换为b = 0 OR b = 3OR,重复项_是_ 有意义的,因为您可以使用b = 0 OR a = 3,并且如果您要将两个分开结果集,对于与两个条件均匹配的每条记录,最终可能会出现重复项。

因此,无论您使用IN还是,都将始终执行重复过滤OR。但是,如果您从一开始就知道没有重复项(通常是在使用时的情况),IN则可以使用UNIONALL不过滤重复项的方法来获得一些性能:

select distinct(a)
from mytable
where
b = 0

UNION ALL

select distinct(a)
from mytable
where
b = 3
2021-03-23