我有一个包含数十万个条目的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点,等等。
向SELECT device_id FROM entries WHERE updated_at >= start_date AND updated_at <= end_date
运行1个SQL查询以获取整个时间段内的所有条目,然后使用ruby按小时对条目进行分组。
如果有人有任何资源可以解释为什么ruby或MySQL可能会更快这种类型的东西,那将非常感激。想做一些阅读。
答案 0 :(得分:2)
为这些操作构建SQL数据库。使用它们!你总是可以做一些基准测试,但结果对我来说似乎是可以预测的。
答案 1 :(得分:1)
我认为最好的方法是在插入日志时使用updated_at_month,updated_at_day,updated_at_hour(TINYINT - 因为所有值都非常小)INDEXED字段,然后按以下方式选择范围和组:< / p>
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
我认为updated_at是索引字段。
或
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
但是,我们总共讨论了多少行?
正如我注意到你从中选择了device_id字段而没有任何计数...或组......也许你应该select device_id, updated_at_day,updated_at_hour, count(*) as times