Wir haben eine Transact-SQL-Anweisung, die 4 Tabellen mit Millionen von Zeilen abfragt.Sql-Abfrage mit Joins zwischen vier Tabellen mit Millionen von Zeilen
Es dauert einige Minuten, obwohl es laut TuningAdvisor mit Indizes und Statistiken optimiert wurde.
Die Struktur der Abfrage ist wie:
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
Da jede Transaktionstabelle Millionen von Zeilen enthält, halte ich es für Aufspalten pro Transaktion Tabelle in einer Abfrage auf, Tabellenvariablen wie @real
verwenden, @budget
und @hours
und dann beitreten diese in einem endgültigen SELECT
. Aber in Tests scheint es nicht zu beschleunigen.
Wie würden Sie damit umgehen, um es zu beschleunigen?
Hmmm ... Ist das nicht SELECT EmployeeID, EmployeeName, SUM (...), SUM (...) FROM Mitarbeiter GROUP BY EmployeeID, EmployeeName? – Tomalak
Warum Gruppe auf Primärschlüssel? – Quassnoi
Das ist ein Fehler (schlampiges Lesen). Macht nichts, mein Schlechter. +1 – Tomalak