更新:它似乎是問題(如各種人所述)正在將日期時間字段更改爲查詢中的日期字段。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
感謝
編輯:根據要求
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
請提供執行計劃(在選擇之前添加解釋時的輸出) – 2012-04-26 13:38:59
您的日曆表中包含每個日期。你從2008年開始每天都會去現在的日期嗎?您可能會更好地使用每天計數的彙總表,而不是每次重新計算。 – DRapp 2012-04-26 16:29:10
這個想法是獲取highstocks圖表的數據 - http://www.highcharts.com/,因此從2008年到現在將是理想的。只要至少有1個,我就可以每天獲得計數......如果我無法實現這個目標,我想這將會回落。 – eek 2012-04-26 17:01:12