EXEC需要多少钱?

时间:2016-02-14 12:09:46

标签: sql-server tsql stored-procedures

我继承了一些遗留代码,其中每个存储过程都实现两次:一个用于单个“case id”通过输入参数提供,另一个用于 输入参数提供的“case id”列表

通过(重新)使用“list SP”重新实现每个“单个id”SP,我被赋予了“提高可维护性”的任务。相当乏味,但没有什么火箭科学:

CREATE PROCEDURE [dbo].[SingleIdProc]
    @CaseId BIGINT
AS
    BEGIN
        DECLARE @TTIdsList dbo.TTIdsList
        INSERT INTO @TTIdsList(id) 
        VALUES (@CaseId)

        EXEC [dbo].[SingleIdProcByList]
             @CaseIds = @TTIdsList
    END
RETURN 0

它正常工作(正确!),但现在DBA抱怨说这会损害性能以至于他不得不将所有这些“固定”的SP恢复到他们之前的版本......

所以我的问题是:

  1. 间接通话费用多少?
  2. 我如何衡量绩效差异?

1 个答案:

答案 0 :(得分:4)

性能上的差异可能不是由EXEC引起的。

特定ID的执行计划很可能与table参数的执行计划完全不同。给定一个简单的bigint参数时,优化器可能能够找到更好的计划。

您可能会发现这篇文章关于Execution Plan Basics有用。

要在SSMS中查看实际执行计划,可以使用按钮/命令来显示/包含实际执行计划。见Displaying Graphical Execution Plans (SQL Server Management Studio)

我还建议SQL Sentry Plan Explorer。即使免费版也非常好。您可以同时运行两个变体,并且您将看到彼此相邻的所有统计数据。它有助于了解正在发生的事情。