gpt4 book ai didi

sql - 动态 SQL 比硬编码的等价物花费的时间要长得多

转载 作者:行者123 更新时间:2023-12-02 14:30:36 25 4
gpt4 key购买 nike

我有一段动态 SQL。运行时间大约需要4分钟。如果我改为获取 SQL 的输出并运行它,则需要大约 20 秒。为什么会出现差异?我知道在动态版本中构建 SQL 需要花费一些时间,但我无法想象它会那么昂贵。

大家有什么想法吗?这两个查询应该是相同的,所以我怀疑查询计划缓存有些奇怪,但并没有太多的想法。

编辑:通过获取输出来澄清我的意思。

在动态 SQL 中,最后一行是

EXEC sp_executesql @myQuery,
N'@var1 INT,
@var2 INT,
@var2 INT',
@var1,
@var2,
@var3

我获取了 myQuery 的值并将其放入其自己的 SQL 文件中。该运行时间为 20 秒,而使用执行的动态运行时间为 4 分钟。

编辑2我删除了参数。我得到了有趣的结果。动态 SQL 语句的性能得到了提高。硬编码版本的性能受到了巨大影响。现在两者大致相等。

最佳答案

我假设您正在使用 Microsoft SQL Server(您只将您的问题标记为“sql”)。

在某些情况下,不同的参数值可能会导致不同的优化计划。然后,该优化计划将被缓存,并在下次使用不同参数值执行查询时使用。但该优化方案并不是后续参数取值的最佳方案。

这里有一篇关于此问题和一些解决方法的文章: https://www.simple-talk.com/sql/t-sql-programming/parameter-sniffing/

所以,是的 - 在某些情况下,与运行不带参数化的相同查询相比,使用参数化查询可能会导致性能较差。

如果您无权发布代码,我们就无法知道这是否适用于您的情况。

我尊重你不能这样做——通过发布到 StackOverflow, you implicitly license your code and/or words with a Creative Commons license 。但共享雇主拥有的代码是不合适的,除非他们同意。

关于sql - 动态 SQL 比硬编码的等价物花费的时间要长得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15440260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com