我有一段动态的 SQL。运行大约需要 4 分钟。如果我改为获取 SQL 的输出并运行它,则大约需要 20 秒。为什么会出现差异?我知道在动态版本中构建 SQL 需要一些时间,但我无法想象它会那么贵。
有人有想法么?这两个查询应该是相同的,所以我怀疑查询计划缓存有点奇怪,但并没有太多的想法。
编辑: 通过输出来澄清我的意思。
在动态 SQL 中,最后一行是
EXEC sp_executesql @myQuery,
N'@var1 INT,
@var2 INT,
@var2 INT',
@var1,
@var2,
@var3
我取了 myQuery 的值并将其放入它自己的 SQL 文件中。运行时间为 20 秒,而使用 execute 的动态运行时间为 4 分钟。
编辑 2 我删除了参数。我得到了有趣的结果。动态 SQL 语句的性能得到了提升。硬编码版本对性能产生了巨大影响。现在两人差不多。