画像のようなレコードのテーブルがあります。
<organNum>は組織コードとして11,31,51の3パターンがあります。
<dtDateTime>は記録された時間になります。
<timeUnit>は<dtDateTime>をHHで区別した値になります。
<timeGroup>は午前=10, 午後=20くらいのものだと思ってください。(今回の質問には関係ないため)
これに対してのSELECT文が
SQL
1SELECT 2 organNum, 3 timeUnit, 4 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 4 THEN 1 ELSE 0 END) AS '4月', 5 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 5 THEN 1 ELSE 0 END) AS '5月', 6 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 6 THEN 1 ELSE 0 END) AS '6月', 7 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 7 THEN 1 ELSE 0 END) AS '7月', 8 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 8 THEN 1 ELSE 0 END) AS '8月', 9 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 9 THEN 1 ELSE 0 END) AS '9月', 10 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 10 THEN 1 ELSE 0 END) AS '10月', 11 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 11 THEN 1 ELSE 0 END) AS '11月', 12 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 12 THEN 1 ELSE 0 END) AS '12月', 13 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 1 THEN 1 ELSE 0 END) AS '1月', 14 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 2 THEN 1 ELSE 0 END) AS '2月', 15 SUM(CASE WHEN DATEPART(MONTH,dtDateTime) = 3 THEN 1 ELSE 0 END) AS '3月', 16FROM 17 テーブル 18GROUP BY 19 organNum, timeUnit 20
というように月ごとにカウントをとり、organNumとtimeUnitでグループ化をしています。
自分では問題のないSQLだと思うのですが、これの結果が返ってくるのに6分もかかってしまいます。
レコードが多すぎるのではないかと思いましたが、4600件ほどしか入っておらず、問題になっているとは思えません。
また、予定ですが7~8万件のレコードが入る予定です。
何かパフォーマンスを著しく下げる要因があれば教えて頂きたいです。よろしくお願いします。
環境はSQLServer2016です。