Sql server 一个执行官要多少钱?

Sql server 一个执行官要多少钱?,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我继承了一些遗留代码,其中每个存储过程实现了两次:一个用于通过输入参数提供的单个“案例id”,另一个用于表类型输入参数提供的“案例id”列表 我的任务是通过(重新)使用“列表SP”重新实现每个“单一id”SP来“提高可维护性”。相当乏味,但没有火箭科学: CREATE PROCEDURE [dbo].[SingleIdProc] @CaseId BIGINT AS BEGIN DECLARE @TTIdsList dbo.TTIdsList INS

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

我的任务是通过(重新)使用“列表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恢复到以前的版本

因此,我的问题是:

  • 这样一个间接调用要花多少钱
  • 我自己如何衡量绩效差异

  • 性能上的差异可能不是由
    EXEC
    本身造成的

    特定ID的执行计划很可能与表参数的执行计划大不相同。当给出一个简单的
    bigint
    参数优化器时,它可能会找到更好的计划

    你可能会发现这篇文章很有用

    要查看SSMS中的实际执行计划,有一个按钮/命令显示/包括实际执行计划。看


    我还推荐一种新的方法。即使是免费版本也很好。您可以在其中同时运行这两个变量,您将看到所有的统计数据彼此相邻。这有助于了解发生了什么。

    标量版本和TVP版本的执行计划是什么样子的?这与
    EXEC
    本身无关。特定ID的执行计划很可能与表参数的执行计划大不相同。当给定一个简单的
    bigint
    时,参数优化器能够找到更好的计划。@MartinSmith标量和向量版本的实现是相同的(当然,输入参数除外,它要求按CaseId进行连接,以便在表上而不是在单个bigint上运行相同的精确代码).看一看:在SSMS中有一个按钮/选项显示实际执行计划。我也会推荐一个(即使是免费的版本也很好)。你可能会发现这很有用。