このクエリを機能させるのを手伝ってもらえますか?
アクティブなユーザー (テーブル: 、ステータス: (log
アクティブの場合)) ごとにログに記録されたアイテム (テーブル: ) を日別 (テーブル: 、行のない日を含む)にカウントするログ クエリがあります。user
1
calendar
次のクエリの実行には 10 分かかります。これを数分ではなく数秒で実行するにはどうすればよいですか?
SELECT
c.day, COUNT(u.id) AS count
FROM calendar c
LEFT JOIN log l
ON c.day = DATE_FORMAT(l.db_timestamp , '%Y-%m-%d')
LEFT JOIN user u
ON l.user_id = u.id
AND u.user_status_type_id = 1
WHERE
c.day > '2012-12-01'
AND c.day < '2013-01-01'
GROUP BY
c.day
テーブル構造:
calendar (~3,000 rows)
day
===============================
2012-01-01
2012-01-02
2012-01-03
...
2020-01-01
log (~30,000 rows)
id user_id db_timestamp
================================
1 1 2012-01-01 01:01:01
1 2 2012-01-01 01:01:01
1 1 2012-01-01 01:01:01
user (~3,000,000 rows)
id user_status_type_id
================================
1 1
1 0
結果は次のようになります。
Sample Expected Results
day count
=================
2012-12-01 1
2012-12-02 0
2012-12-03 4
...
2012-12-31 0
残念ながら、実行には永遠に時間がかかります。次に何をすべきですか?