Sql 添加了几行代码,现在查询的运行时间是原来的5倍。执行计划几乎完全相同
我有一个查询已经在生产环境中运行了很长时间,平均运行时间为4秒。我在下面添加了代码,它是一个表的声明,然后是该表的插入。然后select查询连接到该查询,并在select语句中从该查询返回1个字段。现在,查询运行最长需要25秒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
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中,这样人们就可以为自己创建计划并看到真正的差异。比检查代码简单多了。慢计划-快计划-你添加了哪些行?我更新了统计数据。。。还是不走运。