我对一个包含大量条目的表进行了查询,这是为了提高性能。下面哪个SQL查询的性能最好?
我应该使用IN吗?
select * from employee where id in (2,3,4,5)或者我应该使用OR
select * from employee where id=2 or id=3 or id=4 or id=5哪种语句在性能方面更有效?
发布于 2015-08-17 23:19:35
Server查询优化器实际上将IN操作符互操作/转换为OR操作符。
例如,我在Server 2012实例中有Northwind数据库,我编写了以下两个查询,一个使用IN操作符,另一个使用OR操作符。
查询
SELECT *
FROM dbo.Customers
WHERE CustomerID IN ('ALFKI','BLAUS','BONAP')
GO
SELECT *
FROM dbo.Customers
WHERE CustomerID = 'ALFKI'
OR CustomerID = 'BLAUS'
OR CustomerID = 'BONAP'
GO执行计划:
两个查询的执行计划完全相同;

寻求谓词
查询优化器完全相同地互操作两个查询,IN操作符被计算为OR操作符。

备注
为了提高查询的性能,您需要开始查找其他地方的问题--问题不在IN或OR运算符中,只需确保您没有在子查询中使用IN,这可能会产生NULL,因为它也将被计算为OR操作符,并且当我们有表达式WHERE Column = NULL时,它会产生NULL,因此您会得到错误/意外的结果。
https://stackoverflow.com/questions/32061123
复制相似问题