用group by加速mysql查询

时间:2012-11-04 14:04:05

标签: mysql

我有一个MySQL查询:

SELECT date(FROM_UNIXTIME(time)) as date,  
count(view) as views  
FROM ('table_1')  
WHERE 'address' = 1  
GROUP BY date(FROM_UNIXTIME(time))

其中

view:自动增量和主键,(int(11))
address:index,(int(11))
time:index,(int(11))

表格的总行数为:270k

这个查询执行缓慢,在mysql-slow.log中我得到了:

  

Query_time:1.839096
  Lock_time:0.000042
  行数:155
  Rows_examined:286435

使用EXPLAIN如下所示:

id      select_type     table       type    possible_keys   key     key_len     ref     rows        Extra
1       SIMPLE          table_1     ref     address         address 5           const   139138      Using where; Using temporary; Using filesort

如何改进此查询以加快执行速度?如果我在PHP中更改日期,可能会更好吗?但我认为在PHP中将日期作为时间戳下一步转换为人类可读,并且make“group by”将花费更多时间,然后在MySQL中进行一次查询。

也许有人知道如何更快地进行此查询?

2 个答案:

答案 0 :(得分:1)

当您将函数date()和FROM_UNIXTIME()应用于组中的时间时,您将终止该字段上可能具有的任何索引优势。

如果您需要按天分组,添加日期列是我能看到加快速度的唯一方法。没有它,您将需要删除您尝试分组的整体设置。您可以添加开始/结束日期以限制日期范围。这将减少被转换和分组的日期。

答案 1 :(得分:0)

您应该考虑在表中添加一个额外的DATE列并为其编制索引。