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() 需要很长时间是不是有任何替代方法来编写此查询?的主要内容,如果未能解决你的问题,请参考以下文章

Spark - 加载许多小 csv 需要很长时间

AG Grid 工具提示需要很长时间才能呈现

谷歌图表需要很长时间才能加载

BigQuery 查询需要很长时间

Git 状态需要很长时间才能完成

Docker 容器需要很长时间才能通过 shell 脚本启动