首先我要说的是,这不是效率或流程变更的要求,仅仅是学术性的。我正在寻找一些我没想到的事情的解释
我有一个非常简单的查询来驱动内部报告。当它归结为它时,有一组数据被加载到临时表中,我们将调用###Sample'。
该公司已要求为某种类型的'添加排除功能。此临时表中的小部件。我们会调用包含这些'类型',[排除]的字段。
更多信息:
所以,基本上:
Select
S.*
FROM #Sample
INNER JOIN [Table with exclusion field]
on [generic unique id]
and [exclusion] not in ('AA','AB')
原始查询(基本上是Select * From #Sample在大约1.5秒内运行。使原始排除的查询大致相同。
然后,以典型的方式,他们希望查看将根据其提供的类型排除的所有记录的列表。
'易'我想在星期五下午4点对自己说。唯一的改变就是删除“不是”。在最后的加入。
Select
S.*
FROM #Sample
INNER JOIN [Table with exclusion field]
on [generic unique id]
and [exclusion] in ('AA','AB')
然而,当我去制作要排除的记录列表时,我在120秒后取消了查询,感觉这太长了。
不用担心。我从概念上沿着另一条路走下去并制作了所要求的清单;但是,我对' IN'之间的性能差异最感兴趣。并且' NOT IN'。
最终,我返回结果中的[exclusion]字段,导出并排序,以便在大约1.5秒的时间内生成详细信息。
更准确地说,为什么会有什么不同?
提前谢谢。
答案 0 :(得分:0)
SQL Server在通过痛苦行(RBAR)操作集合时效果最佳。通常情况下,如果没有'在查询中,它导致RBAR而不是SARGABLE查询。如果不是'可以避免它应该是,并将导致更快的结果。