为了账号安全,请及时绑定邮箱和手机立即绑定

SQLServer在VS中存在性能

SQLServer在VS中存在性能

江户川乱折腾 2019-06-26 17:01:13
SQLServer在VS中存在性能我很好奇下面哪一个会更有效率?我一直对使用IN因为我相信SQLServer会把结果集变成一个大的IF声明。对于一个大的结果集,这可能会导致较差的性能。对于小的结果集,我不确定这两者都是可取的。对于大的结果集EXISTS更有效率?WHERE EXISTS (SELECT * FROM Base WHERE bx.BoxID = Base.BoxID AND [Rank] = 2)v.V.WHERE bx.BoxID IN (SELECT BoxID FROM Base WHERE [Rank = 2])
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

EXISTS会更快,因为一旦引擎找到了一个命中,它将停止看起来,因为条件已经证明是正确的。

带着IN,在进一步处理之前,它将收集子查询的所有结果。


查看完整回答
反对 回复 2019-06-26
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

公认的答案是短视的,这个问题有点松散:

1)未明确提及覆盖指数是否存在于左侧、右侧或两边。

2)既不考虑输入左侧集的大小,也不考虑输入右侧集的大小。
(这个问题只是提到了一个整体的大问题。结果设置)。

我认为,当由于(1)和(2)存在显著的成本差异时,优化器足够聪明地在“in”和“s”之间进行转换,否则它可能只是用作提示(例如,存在是为了鼓励在右侧使用可查找的索引)。

这两个表单都可以在内部转换为连接表单,使连接顺序倒转,并根据估计的行数(左和右)和左、右或两边的索引存在性,以循环、散列或合并的形式运行。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 511 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信