为什么代码中的查询比 SQL 工具中的查询慢

JDT*_*JDT 3 performance sql-server ssms query-performance

当我们在没有应用程序的情况下遇到性能问题时,我们做的第一件事就是尝试隔离问题是代码、查询还是数据库本身。最令人沮丧的是,在代码中执行或在 SQL 工具(例如 SQL Server Management Studio 的查询分析器)中执行的同一查询可能有完全不同的时间安排。

我们目前面临一个问题,即在代码中执行相同的查询需要(平均)15-20 秒。在我们的一台开发笔记本电脑上(针对同一数据库服务器)执行相同的查询将花费相同的时间,而另一台开发笔记本电脑将在 3 秒内运行查询。

我正在寻找为什么在一天中的同一时间针对同一个数据库运行的相同查询会根据它的运行位置而具有如此根本不同的时间(以及为什么以前性能良好的查询会突然变成更慢的 -比蜗牛骑龟怪物没有对数据库进行任何更改)。与我们的代码相比,SQL Server Management Studio 等工具执行查询的方式是否有所不同?

Mar*_*ith 6

不同的执行计划。

当您从不同环境运行查询时,许多事情必须相同才能重用缓存的查询计划。

SET如果查询依赖于隐式名称解析,则包括临时查询的查询文本、各种选项和登录用户的默认架构。

这通常是参数嗅探问题的迹象,其中生成的最佳计划可能会根据传入参数的值而有所不同。当您在 SSMS 中运行查询时,如果它无法重用应用程序正在使用的缓存计划,您将获得一个新的编译的计划适合被测参数值。

看到应用程序慢,SSMS 快?了解更多性能之谜