我们有一个事务 sql 语句,它查询 4 个表,每个表有数百万行。
尽管根据 TuningAdvisor 已使用索引和统计数据对其进行了优化,但仍需要几分钟时间。
查询的结构如下:
SELECT E.EmployeeName
, SUM(M.Amount) AS TotalAmount
, SUM(B.Amount) AS BudgetAmount
, SUM(T.Hours) AS TotalHours
, SUM(TB.Hours) AS BudgetHours
, SUM(CASE WHEN T.Type = 'Waste' THEN T.Hours ELSE 0 END) AS WastedHours
来自员工 E
左加入 MoneyTransactions M
ON E.EmployeeID = M.EmployeeID
LEFT JOIN BudgetTransactions B
ON E.EmployeeID = B.EmployeeID
LEFT JOIN TimeTransactions T
ON E.EmployeeID = T.EmployeeID
左加入 TimeBudgetTransactions TB
ON E.EmployeeID = TB.EmployeeID
GROUP BY E.EmployeeName
由于每个事务表包含数百万行,我考虑将其拆分为每个事务表一个查询,使用表变量,如@real,@budget和@hours,然后将它们连接到一个 final 中SELECT。但在测试中它似乎没有加速。
您将如何处理以加快速度?