У нас есть транзакционная инструкция sql, которая запрашивает 4 таблицы с миллионами строк в каждом.Запрос Sql с объединениями между четырьмя таблицами с миллионами строк
Это займет несколько минут, хотя оно оптимизировано с индексами и статистикой в соответствии с 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
, а затем присоединение к ним в окончательном SELECT
. Но в тестах он, кажется, не ускоряется.
Как вы справитесь с этим, чтобы ускорить его?
Хммм ... Разве это не SELECT EmployeeID, EmployeeName, SUM (...), SUM (...) FROM Employees GROUP BY EmployeeID, EmployeeName? – Tomalak
Почему группа на первичном ключе? – Quassnoi
Это ошибка (небрежное чтение). Ничего, мой плохой. +1 – Tomalak