我应该使用SQL还是Ruby处理大量数据?

时间:2013-06-12 18:41:30

标签: mysql sql ruby-on-rails ruby query-optimization

我有一个包含数十万个条目的MySQL表。

我需要指定日期范围并选择这两个日期之间的所有条目。然后我需要按小时分解条目并获得特定字段。

使用案例: 我需要从6月6日到6月12日的每小时工作细分。因此,在6月6日我需要从早上12点到凌晨1点,凌晨1点到凌晨2点,凌晨2点到凌晨3点等一系列参赛作品。

哪个更快? (以及为什么!):

  1. SELECT device_id FROM entries WHERE updated_at >= sometime AND updated_at <= sometime+1.hour运行144个SQL查询,其中某些时间是下午12点到下午1点,然后是下午1点到下午2点,等等。

  2. SELECT device_id FROM entries WHERE updated_at >= start_date AND updated_at <= end_date运行1个SQL查询以获取整个时间段内的所有条目,然后使用ruby按小时对条目进行分组。

  3. 如果有人有任何资源可以解释为什么ruby或MySQL可能会更快这种类型的东西,那将非常感激。想做一些阅读。

2 个答案:

答案 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