SQLServer在VS中存在性能

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])


江户川乱折腾
浏览 482回答 3
3回答

偶然的你

EXISTS会更快,因为一旦引擎找到了一个命中,它将停止看起来,因为条件已经证明是正确的。带着IN,在进一步处理之前,它将收集子查询的所有结果。

繁花不似锦

公认的答案是短视的,这个问题有点松散:1)未明确提及覆盖指数是否存在于左侧、右侧或两边。2)既不考虑输入左侧集的大小,也不考虑输入右侧集的大小。(这个问题只是提到了一个整体的大问题。结果设置)。我认为,当由于(1)和(2)存在显著的成本差异时,优化器足够聪明地在“in”和“s”之间进行转换,否则它可能只是用作提示(例如,存在是为了鼓励在右侧使用可查找的索引)。这两个表单都可以在内部转换为连接表单,使连接顺序倒转,并根据估计的行数(左和右)和左、右或两边的索引存在性,以循环、散列或合并的形式运行。
打开App,查看更多内容
随时随地看视频慕课网APP