gpt4 book ai didi

sql - 无限期执行 select 语句的存储过程

转载 作者:行者123 更新时间:2023-12-04 13:38:35 25 4
gpt4 key购买 nike

我有一个巨大的存储过程,它将表中的数据收集到 3 个临时表(表变量)中。

@table1: 50,000 records
@table2: 23,000 records
@table3: 15,000 records

准备数据后,存储过程执行一个巨大的选择语句(180 行),将这些临时表和一些物理表中的数据转换为 XML 格式并返回给客户端。

由于项目保密,我不能在这里贴出存储过程。存储过程卡在这个 select 语句处。即使在运行存储过程 24 小时后,它也没有完成执行。

然后我用本地临时表 (#table1, #table2, #table3) 替换了所有表变量。令我惊讶的是,存储过程使用相同的数据成功执行。

我无法理解黑白两种方法的区别;为什么存储过程使用表变量无限期地执行?

最佳答案

表变量有点棘手,因为

  1. 他们没有与他们相关的统计数据
  2. SQL Server 查询优化器 - 由于缺少这些表变量的统计信息 - 始终假定它们仅包含一行

这些“缺点”可能导致查询优化器误入歧途 - 看起来非常糟糕!假设一行会导致非常低效的执行计划,如果这些表变量中确实有更多的行。

如果您使用 5 行或 10 行 - 没什么大不了的 - 但在您的情况下,您使用了数万行,这与一行显着不同。

所以在这种情况下,我总是建议使用“适当的”临时表而不是表变量。

关于sql - 无限期执行 select 语句的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25618754/

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