Sql 添加了几行代码,现在查询的运行时间是原来的5倍。执行计划几乎完全相同

Sql 添加了几行代码,现在查询的运行时间是原来的5倍。执行计划几乎完全相同,sql,sql-server-2012,Sql,Sql Server 2012,我有一个查询已经在生产环境中运行了很长时间,平均运行时间为4秒。我在下面添加了代码,它是一个表的声明,然后是该表的插入。然后select查询连接到该查询,并在select语句中从该查询返回1个字段。现在,查询运行最长需要25秒 DECLARE @tmpStageLoc TABLE ( LP VARCHAR(20) , stgloc VARCHAR(20) ) INSERT INTO @tmpStageLoc

我有一个查询已经在生产环境中运行了很长时间,平均运行时间为4秒。我在下面添加了代码,它是一个表的声明,然后是该表的插入。然后select查询连接到该查询,并在select语句中从该查询返回1个字段。现在,查询运行最长需要25秒

DECLARE @tmpStageLoc TABLE
        (
          LP VARCHAR(20) ,
          stgloc VARCHAR(20)
        )

    INSERT  INTO @tmpStageLoc
            EXEC dbo.spGetStageLoc @ActLP = @LP;

--Try to get data from DW tables first. 
    INSERT  INTO [COMMON_INFORMATION].[dbo].[ProcTmpData]
            ( SPID ,
              DataSetName ,
              IntValue1 ,                      --JRB004
              ChValue1 ,                       --JRB001
              String1 ,
              InsDate
            )
            SELECT DISTINCT
                    @@SPID ,
                    @datasetname ,
                    ls.ToDC ,
                    col.Cust_No                        --JRB001
                    ,
                    REPLACE(@LOADNUM, ' ', '') + --JRB007
                    '~' + 'N/A'
                    + --JRB005 Wave number no longer printed on label
                    '~' + CASE WHEN la.stage_loc IS NULL THEN ''
                               ELSE la.stage_loc + '-' + ISNULL(la.misc_info,
                                                              '')
                          END + '~' + fa.OrderControlNo + '~' + col.Cust_No
                    + '~' + SUBSTRING(cst.name, 1, 20) + '~'
                    + SUBSTRING(cst.name, 21, 5) + '~' + LEFT(cst.address1
                                                              + ', '
                                                              + CASE
                                                              WHEN cst.address2 IS NULL
                                                              THEN ''
                                                              ELSE ( cst.address2
                                                              + ', ' )
                                                              END + cst.city
                                                              + ', '
                                                              + cst.state, 45)
                    + '~' + ls.StopNO + '~' + ls.LoadNo + '~' + e.first_name
                    + ' ' + e.last_name + --JRB009
                    '~' + --JRB009
    CASE WHEN cst.plt_usage IS NULL      --JRB009
              THEN ''                          --JRB009
         ELSE                                 --JRB009
              '# ' + LEFT(cst.plt_usage, 20)        --JRB009
    END + '~' + ISNULL(STG.STGLOC, '') + '~'                               --JRB009
                    ,
                    @RUNDTE
            FROM    dbo.tblFactAction AS fa
                    LEFT OUTER JOIN COMMON_INFORMATION.dbo.LoadStop AS ls ON LEFT(fa.OrderControlNo,
                                                              8) = ls.ExtOrderNo
                                                              AND ls.LatestLoadFlg = 1      --JRB008
                    LEFT OUTER JOIN dbo.RP_LaneAssign AS la ON ls.LoadNo = la.carrier_move_id
                                                              OR ls.ExtOrderNo = la.order_num
                    LEFT OUTER JOIN dbo.Cust_Order_Lookup AS col ON fa.OrderControlNo = col.Order_Control_no
                    LEFT OUTER JOIN COMMON_INFORMATION.dbo.Partners AS cst ON col.Cust_No = cst.partner_shipto
                    LEFT OUTER JOIN COMMON_INFORMATION.dbo.Employee AS e ON fa.EmployeeID = CAST(e.emp_no AS VARCHAR(40))
                    LEFT OUTER JOIN @tmpStageLoc STG ON fa.actlp = STG.LP
            WHERE   fa.ActLP = @LOADNUM
                    AND fa.AssignTypeID IN ( 'PB01', 'PF01' )
我在SQLSentryPlanExplorer中查看了执行计划,它们看起来几乎相同。我正在使用该软件的免费版本。我不明白为什么查询需要这么长时间才能运行。仅供参考,当我执行被调用的存储过程时,它会立即运行


有没有办法弄清楚为什么查询会运行这么长时间?

您更新了统计信息吗?尝试将实际计划添加到PasteBin(或其他地方)的XML中,这样人们就可以为自己创建计划并看到真正的差异。比检查代码简单多了。慢计划-快计划-你添加了哪些行?我更新了统计数据。。。还是不走运。