我正在尝试优化存储过程以提高整体性能。目前,该设计具有多个临时表,最后一列用于在从中绘制数据的字段上执行聚合函数(如SUM)。
例如:
INSERT #TBL_Cancellations(currencyID, DateValue, Cancellations)
SELECT C.CurrencyID, C.Date, SUM(T.Amount) - SUM(T.Debit)
FROM Currency C
JOIN Transaction T ON C.CurrencyId = T.CurrencyId
-- More conditions here . . .
GROUP BY C.CurrencyId, C.Date
在其中一个临时表的最后一个字段上执行的一个聚合函数的示例如下所示:
SELECT DISTINCT
C.CurrencyCode 'Currency Code',
C.ConversionRate 'Conversion Rate',
R.Refunds,
F.Fees 'Fees',
D.Deposits 'Desposits'
-- More here . . .
FROM
#TBL_Refunds (CurrencyID int, DateValue DATETIME, Refunds decimal(18,2)) R
LEFT JOIN
Currency C ON R.CurrencyID = C.CurrencyID
LEFT JOIN
#TBL_Fees F ON F.CurrencyID = C.CurrencyID
LEFT JOIN
#TBL_Deposits D ON D.CurrencyID = C.CurrencyID
-- More JOINS here. . .
最终选择输出每个临时表的聚合字段,并使用LEFT JOIN匹配每个临时表。
例如
List
有没有更好的设计来解决这个问题而不使用临时表?是否有更现代的方法来解决这个问题?
我对编写存储过程和SQL相对较新,所以任何帮助都会很棒。
谢谢!
答案 0 :(得分:0)
我建议您在临时表上使用索引,因为最后您似乎只使用select查询来查找不同的记录。并确保最后您应该删除临时表或索引,因为下次他们将花费更多时间来重建索引。
我也不想使用create语句为临时表使用insert into statement。
确保您在执行这些聚合函数的列上有适当的索引
答案 1 :(得分:0)
什么表现不佳。马上我会: