首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Server中的v/s或运算符中

在Server中的v/s或运算符中
EN

Stack Overflow用户
提问于 2015-08-17 23:06:45
回答 1查看 82关注 0票数 2

我对一个包含大量条目的表进行了查询,这是为了提高性能。下面哪个SQL查询的性能最好?

我应该使用IN吗?

代码语言:javascript
复制
select * from employee where id in (2,3,4,5)

或者我应该使用OR

代码语言:javascript
复制
select * from employee where id=2 or id=3 or id=4 or id=5

哪种语句在性能方面更有效?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-17 23:19:35

Server查询优化器实际上将IN操作符互操作/转换为OR操作符。

例如,我在Server 2012实例中有Northwind数据库,我编写了以下两个查询,一个使用IN操作符,另一个使用OR操作符。

查询

代码语言:javascript
复制
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操作符。

备注

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32061123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档