У нас есть транзакционный 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
FROM Employees E
LEFT JOIN 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
LEFT JOIN TimeBudgetTransactions TB
ON E.EmployeeID = TB.EmployeeID
GROUP BY E.EmployeeName
Поскольку каждая таблица транзакций содержит миллионы строк, я думаю разделить ее на один запрос на таблицу транзакций, используя переменные таблицы, такие как @real
, @budget
и @hours
, а затем объединить их в окончательный * 1011. *. Но в тестах он, кажется, не ускоряется.
Как бы вы справились с этим, чтобы ускорить его?