我很难过。在SSMS中,当我使用参数执行存储过程时,该过程需要6秒。当从Delphi程序执行(具有相同的参数)时,该过程需要26秒才能运行。我运行了SQL Profiler并运行了Devart的DBMonitor,它只确认时间实际上是26秒。
为了确保我将苹果与苹果进行比较,我在两种情况下都执行之前清理环境和缓存......
该过程有7个可选参数(默认值)all varchar。
有人可以指导我找出问题的来源吗?
提前致谢。
答案 0 :(得分:2)
感谢@Alex K。评论+1导致我Slow in application Fast in SSMS我能够指出问题。 虽然这篇文章是30页 - 它花了7页来理解和解决这个问题。
发现的两个最常见问题是参数嗅探和应用程序为运行查询设置的不同选项。
将参数值复制到过程的局部变量中以避免参数嗅探(这并没有改变行为)后,我查看了应用程序中设置的不同选项,例如: ArithAbort,ansi_warnings,concat_null_yields_null等。
我们在应用程序中遇到的问题是,在Delphi中运行的应用程序在启动之前设置了一堆选项:ArithAbort off,ansi_warnings off ...包括concat_null_yields_null OFF
在我的情况下导致问题的是concat_null_yields_null OFF 在SSMS中运行时(默认情况下),concat_null_yields_null为ON。
我现在需要弄清楚这个选项是ON / OFF如何影响存储过程。