gpt4 book ai didi

sql - 从存储过程中调用存储过程的性能问题

转载 作者:行者123 更新时间:2023-12-04 12:57:36 24 4
gpt4 key购买 nike

我从事的项目具有以下要求:

TableA is the parent table. Whenever any children records of TableA are updated the 'LastActivityDate' field in TableA should be updated with the current UTC date.

现在,我知道有很多方法可以做到这一点。我的帖子不是关于可以实现这一目标的许多不同方式。

我最初建议为此要求使用触发器,但我们的 DBA 拒绝了我,因为他们不想在这个数据库中使用触发器(我不知道为什么,这对我的问题并不重要)。我最终创建了一个存储过程,其唯一目的是更新 TableA.LastActivityDate。然后,我对 TableA 的子级的更新/插入存储过程进行编码以调用此存储过程。因此,例如, child 的更新存储过程如下所示:

Create Procedure TableB_UPD
(
@TableBId INT
@TableBName VARCHAR(30)
)
AS
BEGIN
UPDATE dbo.TableB
SET TableBName = @TableBName
WHERE
(TableBId = @TableBId)

DECLARE @TableAId INT
SELECT
@TableAId = TableAId
FROM
dbo.TableB
WHERE
(TableBId = @TableBId)

EXEC dbo.TableA_LastActivityDate_UPD @TableAId
END

这是非常简单的代码,我从 TableB_UPD 存储过程中调用 dbo.TableA_LastActivityDate_UPD 存储过程。当我们的 DBA 看到这个时,他们拒绝在他们的数据库中使用它。他们告诉我,在存储过程中调用存储过程会对性能造成巨大影响。我一直无法找到任何好的在线文章来支持此声明(DBA 也无法给我任何文章)。

我在很多数据库中都看到过这种代码,但直到现在才听说有任何性能问题。我的问题是:有人可以解释此类代码的性能问题吗?我也非常感谢对文章的引用。

这是在 SQL Server 2005 中。

最佳答案

如有疑问,请查看执行计划和 SQL Profiler 以确保您的过程以最佳方式执行。他们比我们更能告诉您有关情况的信息。

我认为涉及嵌套存储过程的唯一问题(甚至可以远程视为问题)是带有事务的嵌套存储过程中的错误处理,但您似乎并没有在这里进行。实际上,我的示例更像是“正确编写存储过程”的案例。

尽管如此,嵌套存储过程成为“巨大的性能影响”对我来说是个新闻,而且我肯定也找不到任何支持该声明的内容。

关于sql - 从存储过程中调用存储过程的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3789015/

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