【发布时间】:2012-08-30 20:44:26
【问题描述】:
我有一个每天增长数千万行的表。表中的行包含有关页面查看流量的每小时信息。
表格上的索引是 url 和 datetime。
我想按天而不是按小时汇总信息。我该怎么做?这是一个举例说明我正在尝试做的查询:
SELECT url, sum(pageviews), sum(int_views), sum(ext_views)
FROM news
WHERE datetime >= "2012-08-29 00:00:00" AND datetime <= "2012-08-29 23:00:00"
GROUP BY url
ORDER BY pageviews DESC
LIMIT 10;
不过,上面的查询永远不会结束。表中有数百万行。有没有更有效的方法可以获取这些汇总数据?
【问题讨论】:
-
表上的索引是什么,查询的解释计划是什么?
-
@Ben,索引在 url 和 datetime 上。解释计划是什么?
-
@Ben,我将如何进行明确的字符到日期转换? datetime 列的数据类型为 datetime。 MySQL 会为我们完成从字符到日期时间类型的转换吗?我以为是的。它应该选择 24 小时的数据,从 0:00 到 23:59。
-
这是一个相当困难的评论问题!它指示数据库优化器在执行查询时将采用的路径。 dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html
-
@egidra 。 . .您需要了解分区表。这是一个复杂的主题,需要在这里回答。您正在不必要地阅读所有历史数据。每天使用一个单独的分区,您将大大减少此类查询的负载。
标签: mysql