Sql 优化使用多个临时表连接和输出数据的存储过程
我正在尝试优化存储过程以提高总体性能。目前,该设计有多个临时表,最后一列设计用于对从中提取数据的字段执行聚合函数(如SUM) 例如:Sql 优化使用多个临时表连接和输出数据的存储过程,sql,sql-server,stored-procedures,database-design,Sql,Sql Server,Stored Procedures,Database Design,我正在尝试优化存储过程以提高总体性能。目前,该设计有多个临时表,最后一列设计用于对从中提取数据的字段执行聚合函数(如SUM) 例如: CREATE TABLE #TBL_Refunds (CurrencyID int, DateValue DATETIME, Refunds decimal(18,2)) CREATE TABLE #TBL_Fees (CurrencyID int, DateValue DATETIME, Fees decimal(18,2)) CREATE TABLE #
CREATE TABLE #TBL_Refunds (CurrencyID int, DateValue DATETIME, Refunds decimal(18,2))
CREATE TABLE #TBL_Fees (CurrencyID int, DateValue DATETIME, Fees decimal(18,2))
CREATE TABLE #TBL_Deposits (CurrencyID int, DateValue DATETIME, Deposits decimal(18,2))
CREATE TABLE #TBL_Cancellations (CurrencyID int, DateValue DATETIME, Cancellations decimal(18,2))
对其中一个临时表的最后一个字段执行的聚合函数示例如下所示:
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
最终选择输出每个临时表的聚合字段,并使用左连接匹配每个临时表
例如
在不使用临时表的情况下,是否有更好的设计来解决此问题?有没有更现代的方法来解决这个问题
我对编写存储过程和SQL还比较陌生,所以任何帮助都会很好
谢谢 我建议您在临时表上使用索引,因为最后似乎只使用select查询来查找不同的记录。并确保在最后,您应该删除临时表或索引,因为下一次重建索引将花费更多时间 我也不希望对临时表使用create语句,而是使用insert into语句
确保在执行这些聚合函数的列上有适当的索引,这些聚合函数执行得不好。我马上会:
有没有更好的设计来解决这个问题
-哪个问题?您的SQL语句没有描述任何可能的性能问题。优化的关键是分析瓶颈。你有没有察觉到有人在闹哄哄的
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. . .