首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"IN“;“不在”Sql性能

"IN“;“不在”Sql性能
EN

Stack Overflow用户
提问于 2015-03-06 21:23:27
回答 1查看 107关注 0票数 1

首先让我说,这不是对效率或流程改变的要求,而仅仅是学术性的要求。我只是想找个解释我没料到的

我有一个非常简单的查询来驱动内部报告。说到这里,就会有一组数据被加载到一个临时表中,我们称之为“#Sample”。

企业要求在这个临时表中为某个“类型”小部件添加一个排除项。我们将把包含这些类型的字段称为“排除”。

更多一些信息:

  • #样本的记录将不超过1200条
  • 排除是varchar(2)
  • 确切地说有两种排除
  • *样本与表之间存在1:1的排除字段关系。

所以,基本上:

代码语言:javascript
复制
Select
S.*
FROM #Sample
INNER JOIN [Table with exclusion field]
   on [generic unique id]
   and [exclusion] not in ('AA','AB')

最初的查询(基本上选择*从#样例运行大约1.5秒。进行原始排除的查询也是一样的。

然后,以典型的方式,他们希望看到所有记录的列表,这些记录将根据它们提供的类型被排除在外。

“伊西”,我在一个星期五下午4点对自己说。唯一的更改是删除最后连接中的“Not”。

代码语言:javascript
复制
Select
S.*
FROM #Sample
INNER JOIN [Table with exclusion field]
   on [generic unique id]
   and [exclusion] in ('AA','AB')

但是,当我去生成要排除的记录列表时,我在120秒后取消了查询,觉得这太长了。

别担心。我在概念上走了另一条路,并产生了所要求的列表;然而,我最感兴趣的是' in‘和'NOT IN’之间的性能差异。

最后,我返回结果中的排除字段,导出并排序,在大约1.5秒的执行时间内生成详细信息。

更确切地说,为什么会有区别呢?

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2015-03-06 22:01:56

当SQL Server通过痛苦的行(RBAR)对集合(而不是行)进行操作时,它的工作效果最好。通常,当查询中有“not”时,就会产生RBAR而不是SARGABLE查询。如果一个'not‘可以避免,它应该是,并将导致更快的结果。

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

https://stackoverflow.com/questions/28907905

复制
相关文章

相似问题

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