【发布时间】:2013-06-09 00:05:56
【问题描述】:
我有一个 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 对于这类东西可能更快,我将不胜感激。想做一些阅读。
【问题讨论】:
-
描述“日志”。您是指单独的行/记录,还是将整个日志文件存储在字符字段中?我们很难从你的肩膀上看到你的意思,所以例子真的可以帮助我们理解你在说什么。一旦我们知道我们可以提出更好的建议。在那之前,我们都是在黑暗中拍摄。
-
抱歉,logs 是一个错误的名称,导致与日志文件混淆。它只是一个称为日志的表,但也可以称为条目。我会更新我的问题。
-
解决此问题的一种方法是截断您的
updated_at字段值以删除分钟和秒,并在结果日期时间上执行group by。这将为您提供每小时组。请参阅 stackoverflow.com/questions/7928537/… 和 stackoverflow.com/questions/1921362/… 和 stackoverflow.com/questions/9922840/… 了解想法。
标签: mysql sql ruby-on-rails ruby query-optimization