我有一个mysql表,其中有成千上万个条目。
我需要指定一个日期范围并选择这两个日期之间的所有条目。然后我需要按小时细分条目并获得一个特定字段。
用例:
从6月6日到6月12日,我需要一个小时一个小时的条目细目。所以,在6月6日,我需要从12点到凌晨1点、凌晨1点到凌晨2点、凌晨2点到凌晨3点等一系列条目。
哪个更快?(为什么!):
SELECT device_id FROM entries WHERE updated_at >= sometime AND updated_at <= sometime+1.hour中运行144个sql查询,其中有时是中午12点到下午1点,然后是下午1点到下午2点,等等。
运行1个sql查询SELECT device_id FROM entries WHERE updated_at >= start_date AND updated_at <= end_date以获取整个时间段内的所有条目,然后使用ruby按小时对条目进行分组。
如果有人知道为什么ruby或mysql在这方面会更快,那就非常感谢了。想读点书。

最佳答案

我认为最好的方法是,在插入日志时,在月、日、时(tinyint-因为所有值都很小)更新索引字段,然后按如下方式选择范围和分组:

select device_id FROM logs where updated_at BETWEEN sometime AND some_other_time group by updated_at_month, updated_at_day, updated_at_hour

我假设更新的是索引字段。

select device_id FROM logs where updated_at_month=6 and updated_at_day>=6 and updated_at_day<=12 group by updated_at_day, updated_at_hour

但是,我们总共要谈几行呢?
正如我注意到的,您从中选择设备id字段时没有任何计数…或组…也许您应该select device_id, updated_at_day,updated_at_hour, count(*) as times

10-04 12:19
查看更多