Max() 需要很长时间是不是有任何替代方法来编写此查询?
Posted
技术标签:
【中文标题】Max() 需要很长时间是不是有任何替代方法来编写此查询?【英文标题】:Max() is taking quite long is there any alternate way to write this query?Max() 需要很长时间是否有任何替代方法来编写此查询? 【发布时间】:2020-08-07 04:41:32 【问题描述】:我编写了一个 mysql 查询,可以根据需要正常工作。我想做的是按小时和分钟搜索最新记录。 例如:
id, date, value, ip
1 2020-04-22 21:10:14 10 123
2 2020-04-22 21:20:14 20 123
3 2020-04-23 15:26:14 30 123
4 2020-04-23 15:50:14 40 123
5 2020-04-23 18:30:14 50 123
6 2020-04-24 11:05:14 60 123
7 2020-04-24 11:15:14 70 123
所以我的查询将返回:
id, date, value
2 2020-04-22 21:20:14 20 123
4 2020-04-23 15:50:14 40 123
5 2020-04-23 18:30:14 50 123
7 2020-04-24 11:15:14 70 123
这是我的查询:
FROM table_name
WHERE id IN (
SELECT MAX(id)
FROM table_name
WHERE ip = '12345'
GROUP BY HOUR(`date`), DATE(`date`)
)
ORDER BY id DESC;
我的表有数百万条记录,我正在尝试通过查询找出方法。否则,我有另一种方法可以通过 Cron Jobs 来完成。
【问题讨论】:
【参考方案1】:您可以尝试使用相关子查询进行过滤:
select t.*
from table_name t
where t.id = (
select max(t1.id)
from mytable t1
where
t1.ip = 12345
and t1.date >= date_format(t.date, '%Y-%m-%d %h:00:00')
and t1.date < date_format(t.date, '%Y-%m-%d %h:00:00') + interval 1 hour
)
为了提高此查询的性能,您需要在(ip, date, id)
上建立索引。
【讨论】:
以上是关于Max() 需要很长时间是不是有任何替代方法来编写此查询?的主要内容,如果未能解决你的问题,请参考以下文章