それぞれに数百万の行がある4つのテーブルを照会するtransact SQL文があります。数百万の行を持つ4つのテーブル間の結合によるSqlクエリ
TuningAdvisorに基づいてインデックスと統計情報を使用して最適化されていても、数分かかることがあります。各トランザクションテーブルが数百万行を含んでいるので、私は@real
、@budget
、および@hours
のようにテーブル変数を使用して、トランザクションテーブルにつき1つのクエリにそれを分割を検討し
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
:
クエリの構造が似ています最後にSELECT
に参加してください。しかし、テストではスピードアップしていないようです。
これをスピードアップするにはどうすれば対処できますか?
Hmmm ...そうではありませんSELECT EmployeeID、EmployeeName、SUM(...)、SUM(...)従業員からGROUP BY EmployeeID、EmployeeName? – Tomalak
プライマリキーでグループ化する理由 – Quassnoi
それは間違いです(読みづらい)。決して気にしないでください。 +1 – Tomalak