我有一个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中进行一次查询。
也许有人知道如何更快地进行此查询?
答案 0 :(得分:1)
当您将函数date()和FROM_UNIXTIME()应用于组中的时间时,您将终止该字段上可能具有的任何索引优势。
如果您需要按天分组,添加日期列是我能看到加快速度的唯一方法。没有它,您将需要删除您尝试分组的整体设置。您可以添加开始/结束日期以限制日期范围。这将减少被转换和分组的日期。
答案 1 :(得分:0)
您应该考虑在表中添加一个额外的DATE
列并为其编制索引。