【发布时间】:2012-04-26 19:02:58
【问题描述】:
在我的存储过程中,我使用#temptable 从一个表中获取数据并更新#temptable 以获得结果。在我的生产环境中,此存储过程消耗大量时间,有时会导致超时,但在较低的环境中,此查询绝对完美。
CREATE TABLE #TempTable
(
ID int IDENTITY PRIMARY KEY,
TOTALPOLICY nvarchar(14),
SYMBOL nvarchar (3),
POLNUM nvarchar (7),
MODULE nvarchar (2),
LOC char (2),
MCO char (2),
LOB char (3),
INSUREDNAME nvarchar (100),
TotalPremium decimal (10,2),
ServiceCharges decimal (10,2),
TotalPaid decimal (10,2),
TotalRefunded decimal (10,2),
CurrentBalance decimal (10,2),
TotalBilled decimal (10,2),
PCO char (2)
)
INSERT INTO #TempTable (TOTALPOLICY,SYMBOL, POLNUM, MODULE, LOC, MCO, LOB, INSUREDNAME,TotalPremium, ServiceCharges, TotalPaid, TotalRefunded, CurrentBalance, TotalBilled, PCO) --PCR 109 SMT added PCO
EXEC(@sql)
--PCR 109 Start SMT
Update #TempTable
Set TotalPaid = IsNull((Select sum(PaymentAmt)
From SHCashActivity with (nolock)
Where #TempTable.POLNUM = PolicyNbr
and #TempTable.Module = PolicyModuleNbr
and #TempTable.Symbol = PolicySymbolCd
and CashActivityTypeCd in ('P', 'C', 'N')
and CashAppliedStatusCd in ('1','2')), 0)
请告诉我什么可以解决这个问题。
【问题讨论】:
-
我认为您应该考虑重新设计查询以不使用临时表。只要您的隔离级别允许,您就可以在查询时从同一个表中获取总和。但看起来你可以使用一些索引。
-
我假设 - 根据您的 stored 过程,这是针对(Microsoft)SQL Server - 对吗?如果是这样:哪个版本的 SQL Server??
-
如果这在您的开发/测试环境中完美运行,但不适用于生产环境,我的第一个预感是:生产系统是否有更多的数据行?如果是这样:检查您的索引!最有可能的是,只有少数行,它在您的开发环境中运行良好 - 但在生产环境中,有大量数据,您需要微调查询以获得最佳速度。
标签: sql-server stored-procedures timeout