gpt4 book ai didi

sql-server - 为什么存储过程的运行速度比裸 T-SQL 慢?

转载 作者:行者123 更新时间:2023-12-03 01:37:25 25 4
gpt4 key购买 nike

我在 MS-SQL 2005 数据库中有一个存储过程:

  • 创建两个临时表
  • 执行具有 7 个连接的查询,但并不是非常复杂
  • 将结果插入临时表之一
  • 再执行两个查询(不连接到“真实”表),将其中一个临时表中的记录放入另一个临时表中。
  • 返回第二个临时表的结果集
  • 删除两个临时表

SP 采用两个参数,然后在第一个查询中使用它们。

当我针对一组给定参数运行 SP 时,执行需要 3 分钟。

当我将 SP 的内容作为常规 T-SQL 批处理(预先声明和设置参数)执行时,需要 10 秒。这些数字在多次连续运行中是一致的。

这是一个巨大的差异,并且没有明显的功能变化。可能是什么原因造成的?

更新

重新索引我的表 (DBCC REINDEX) 显着加快了 SP 版本的速度。 SP 版本现在需要 1 秒,而原始 SQL 需要 6 秒。

这对于解决当前问题来说非常棒,但我仍然想知道“为什么”。

最佳答案

这可能正是因为在 SP 中执行计划被缓存并且对于数据集来说不是最佳的。当数据集很大程度上取决于参数或在调用之间发生很大变化时,最好在“create proc”中指定“with recompile”。重新编译时您会损失几分之一秒,但执行时可能会赢得几分钟。

PS为什么我不能评论?仅“您的答案”可用。

关于sql-server - 为什么存储过程的运行速度比裸 T-SQL 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3580518/

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