【问题标题】:Stored procedure runs code much slower than SSMS存储过程运行代码比 SSMS 慢得多
【发布时间】:2016-06-25 16:41:12
【问题描述】:

我有一个运行代码大约需要 20 秒的存储过程。当我将代码直接复制到 SSMS 中时,它会在

我已经阅读了参数嗅探,并更改了我的代码来处理这个问题,没有影响。我还尝试了在调用主存储过程和调用所有其他存储过程时的“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),它会立即运行。

我缺少什么吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 不,我正在执行代码 - 这里不仅仅是 CTRL+A、CTRL+V,它是 SPROC 中“AS BEGIN”之后的代码。此外,各个 SPROCS 中都有审计写入,并且审计日志正在更新,所以我 100% 知道正在调用子 sproc。
    • 你得到相同的输出吗?我猜你知道,但值得一问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2019-01-21
    • 2018-03-28
    相关资源
    最近更新 更多