我有一个非常长的脚本,该脚本花费的时间太长,我想知道是否有可能对其进行优化。我已通过使用引发误差函数将其范围缩小到花费太长时间的特定部分。
我基本上是用SQL自学的,所以努力弄清楚它到底是什么,还是有更好的方法。这样做的主要原因是因为我当前正在查看一个小的数据集,而当我尝试使用一个更大的数据集时,时间超过了3小时。
#PolicyEP表输出示例(总共约3.6万行):
ANLSID ID PERSPCODE EPTYPE PERSPVALUE EP
43 43 GR 0 29052346.4434171 0.000160474689163209
43 43 GR 0 28628548.176817 0.000170840971153756
43 43 GR 0 28270358.8468871 0.000181068258057148
表#RPID就是这样:
RPID
0.001
0.002
0.004
0.005
0.01
0.02
0.03333333333
0.1
表#CurrentAnalysis就是这样:
ANLSID
43
44
45
46
-------------下面的脚本需要1分45秒才能运行---------
{CREATE TABLE #EPTable(
Anlsid INT,
Eptype INT,
ID INT,
perspcode VARCHAR(2),
ReturnPeriod FLOAT,
Loss FLOAT)
INSERT INTO #EPTable
SELECT PEP.ANLSID, EPTYPE, ID, PERSPCODE,RPID,
(MAX(PERSPVALUE) + (MIN(PERSPVALUE) - MAX(PERSPVALUE)) * (RPID - MIN(EP))/ NULLIF(NULLIF((MAX(EP) - MIN(EP)), 0), 0))
FROM #PolicyEP PEP
INNER JOIN #CurrentAnalysis AS A ON A.ANLSID = PEP.ANLSID
CROSS JOIN #RPTable RP
WHERE
UNIQUEID = (SELECT MIN(UNIQUEID)
FROM #policyep EP
WHERE EP.PERSPCODE = PEP.PERSPCODE
AND EP.EPTYPE = PEP.EPTYPE
AND EP > RPID
AND ANLSID = A.ANLSID
AND ID = PEP.ID)
OR
UNIQUEID = (SELECT MAX(UNIQUEID)
FROM #policyep EP
WHERE EP.PERSPCODE = PEP.PERSPCODE
AND EP.EPTYPE = PEP.EPTYPE
AND EP < RPID
AND ANLSID = A.ANLSID
AND ID = PEP.ID)
GROUP BY PEP.ANLSID, EPTYPE, ID, PERSPCODE, RPID}
我只是希望这只是一个效率低下的脚本,并且有一种方法可以对其进行优化。情况可能并非如此。