我很好奇以下哪一项会更有效率? 对于使用IN ,我一直比较谨慎,因为我相信SQL Server会将结果集变成一个大的IF语句。 对于较大的结果集,这可能导致性能较差。 对于小的结果集,我不确定是否可取。 对于大的结果集,不会EXISTS更有效率吗? WHERE EXISTS (SELECT * FROM Base WHERE bx.BoxID = Base.BoxID AND [Rank] = 2) 与 WHERE bx.BoxID IN (SELECT BoxID FROM Base WHERE [Rank = 2])
我试图在我维护的Web应用程序中debuggingSQL超时的来源。 我有C#代码的源代码,所以我确切知道哪些代码正在运行。 我已经将应用程序debugging到了执行超时的SQL代码的那一行,然后我观察SQL查询器中运行的查询。 当这个查询从networking执行时,它在30秒后超时。 但是,当我完全按照Profiler中的描述剪切/粘贴查询,并将其放入SSMS并运行时,它几乎立即返回。 我已经跟踪到的问题是在networking连接中将ARITHABORT设置为OFF(也就是说,如果我在SSMS会话中closures了ARITHABORT,它会运行很长时间,如果我将它重新打开,非常快)。 然而,阅读ARITHABORT的描述,它似乎并不适用…我只做一个简单的SELECT,并没有执行任何算术..只是一个单一的内部联接与WHERE条件: 为什么在这种情况下,ARITHABORT OFF会导致这种行为? 有什么办法可以改变从SSMS的连接ARITHABORT设置? 我正在使用SQL Server 2008。