存储过程运行代码比SSMS慢

时间:2016-06-25 16:41:13

标签: sql-server-2008 stored-procedures sqlperformance

我有一个存储过程,大约需要20秒才能运行代码。当我将代码直接复制到SSMS中时,它运行在< 1秒。现在的复杂性是我的代码实际上运行了20个其他存储过程 - 除了调用其他存储过程之外,主存储过程根本没有做太多工作。

我已阅读参数嗅探,并已更改我的代码以处理此问题,没有任何影响。我还尝试了“with recompile”提示调用主存储过程以及调用所有其他存储过程,这使得它变慢。

还有什么呢?

所以我的调用存储过程如下所示:

CREATE PROCEDURE [dbo].[spr_DoPersonMatch]
    @inPmq_ID bigint                    -- Passed in pending match ID
AS
BEGIN
    SET NOCOUNT ON;

    declare @pmq_ID bigint  
    set @pmq_ID = @inPmq_ID
    declare @Total_match_count as int = 0
    declare @match_rule as int
    declare @AuditMatch as bit = 0

    -- Match Rule 1 - FORENAME & SURNAME & NINO & either (NHSNO or UPN)
    exec dbo.spr_DoPersonMatchRule1 @pmq_ID,@AuditMatch ,@match_count = @Total_match_count output  
    if @Total_match_count > 0 set @match_rule = 1

    -- Match Rule 2 - FORENAME & SURNAME & NINO & either (NHSNO or UPN)
    if @Total_match_count < 1 -- If we have a match, do not do any more matches.  Drop through
    BEGIN
        exec dbo.spr_DoPersonMatchRule2 @pmq_ID,@AuditMatch ,@match_count = @Total_match_count output 
        if @Total_match_count > 0 set @match_rule = 2
    END

正如我所说,如果我将上面的主存储过程代码复制到SSMS中并运行它(在代码顶部设置inPmq_ID),它会立即运行。

我缺少什么?

1 个答案:

答案 0 :(得分:0)

您确定在SSMS中实际执行SPROC吗?我看到程序员忘记实际执行CREATE PROCEDURE脚本而不是底层存储过程的错误。阅读你的帖子说“如果我将...代码复制到SSMS” - 如果你确实这样做了,你的查询将构建proc,但不会执行它。