UPDATE:日付/時刻フィールドをクエリーの日付フィールドに変更しているようです。mysql:RIGHT JOINのカレンダーテーブルに関するクエリースピードの問題
DATE(all_griefs_tbl.actioned_date
を使用すると、actioned_dateを日付フィールドに変更したり、日付と時刻フィールドに分割したりすることなく、より迅速な方法がありますか?
私が取得したい私は2つのテーブル、ステータスや日時フィールドを持つレコードの負荷を持つものを持っているし、他は2008から2015年
に日付とカレンダーのテーブルでは、すべての日付ですそのカウントがゼロであったとしても - - 期間と毎日「受け入れ」されたレコードの数に次のようになります。
| Date | number_accepted |
----------------------------
2012-03-01 723
2012-03-02 723
2012-03-03 1055
2012-03-04 1069
2012-03-05 0
2012-03-06 615
2012-03-07 0
2012-03-08 1072
2012-03-09 664
2012-03-10 859
2012-03-11 0
2012-03-12 778
2012-03-13 987
私は次のことを試してみたが、それは速いだけです小さなデータサンプル(-1000行)で十分です。私は作品だけでなく上に少なくとも600K行
SELECT calendar.datefield AS Date,
COUNT(all_griefs_tbl.actioned_status) AS total_griefs
FROM all_griefs_tbl
RIGHT JOIN calendar
ON (DATE(all_griefs_tbl.actioned_date) = calendar.datefield)
AND all_griefs_tbl.actioned_status = 'accepted'
WHERE calendar.datefield < CURDATE()
GROUP BY calendar.datefield
おかげ
ある何かを必要とEDIT:ものの、
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE calendar range PRIMARY PRIMARY 3 NULL 1576 Using where; Using index
1 SIMPLE all_griefs_tbl ref actioned_status actioned_status 153 const 294975
実行計画(選択前に説明を追加するときの出力) –
は、日付ごとにカレンダー表を提供してください。あなたは、現在の日付が何であれ、2008年以来毎日毎日行くのですか?毎回再計算するのではなく、1日あたりの集計を持つサマリー表を使用する方がよい場合があります。 – DRapp
アイデアはハイスタンチャートのデータを入手することでした - http://www.highcharts.com/ 2008年から現在までは理想的でしょう。私は少なくとも1がある限り、1日あたりのカウントを得ることができます...私はこの仕事を得ることができない場合は、秋になると思います。 – eek