1

我有一个 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:索引,(int(11))
time:索引,(int(11))

表的总行数为:270k

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

Query_time:1.839096
Lock_time:0.000042
Rows_sent: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 使用 where;使用临时的;使用文件排序

如何改进此查询以加快执行速度?如果我在 PHP 中更改日期可能会更好?但我认为在 PHP 中将日期作为时间戳,然后转换为人类可读,并使“分组依据”比 MySQL 中的一个查询花费更多时间。

也许有人知道如何使这个查询更快?

4

2 回答 2

1

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

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

于 2012-11-04T14:10:29.897 回答
0

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

于 2012-11-04T14:11:22.993 回答