我对一个包含大量条目的表进行了查询,我正在尝试提高性能。
以下哪个 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
哪种语句在性能方面更有效?
最佳答案
IN
运算符实际上由 SQL Server 查询优化器互操作/翻译为 OR
运算符。
例如,我的 Sql 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 因此你会得到错误/意外的结果。
关于sql - SQL Server 中的 IN 与 OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32061123/