我在MySQL中有以下表格,记录每天发生的事件的事件计数
event_date event_count
2011-05-03 21
2011-05-04 12
2011-05-05 12
我希望能够通过日期范围和星期几有效地查询。例如 - “5月星期二的event_count是什么?”
目前,event_date字段是日期类型。 MySQL中是否有任何函数可以按星期几查询此列,还是应该在表中添加另一列来存储星期几?
该表将包含数十万行,因此我可以选择最有效的解决方案(而不是最简单的方法)。
答案 0 :(得分:56)
在查询中使用DAYOFWEEK,例如:
SELECT * FROM mytable WHERE MONTH(event_date) = 5 AND DAYOFWEEK(event_date) = 7;
这将找到5月份星期六的所有信息。
要获得最快的读取,存储一个非常规字段,即一周中的某一天(以及您需要的任何其他内容)。这样,您可以索引列并避免全表扫描。
首先尝试上面的内容,看看它是否符合您的需求,如果没有,请添加一些额外的列并将数据存储在写入中。请注意更新异常(如果更改event_date,请确保更新day_of_week列。)
请注意,非规范化字段将增加写入所需的时间,增加写入计算并占用更多空间。确保你真的需要这个好处并且可以衡量它对你的帮助。
答案 1 :(得分:4)
检查DAYOFWEEK()功能
答案 2 :(得分:4)
如果您想要星期几的文字表示 - 请使用DAYNAME()函数。