gpt4 book ai didi

mysql - MySQL中 "LAST"聚合函数的建议解决方案

转载 作者:行者123 更新时间:2023-11-29 01:44:37 24 4
gpt4 key购买 nike

我有一个如下所示的日志表:

logs (_id_, client, metric, value);

我试图从 PHP 前端在 MySQL 中编写以下查询,以从日志表中获取信息。

SELECT client, LAST(value) AS value
FROM logs
WHERE metric = 'free space'
GROUP BY client;

当然,LAST 不是有效的聚合函数。

我建议的解决方案是这样的:

SELECT client, value 
FROM logs
WHERE id IN (
SELECT MAX(id)
FROM logs
WHERE metric = 'free space'
GROUP BY client);

但是,对于一个只有 4,000 行的非常小的表,这个查询在我的开发机器上执行需要超过 60 秒。

建议?

最佳答案

你应该通过连接来做到这一点

SELECT l.client, l.value 
FROM logs l
JOIN ( SELECT client, MAX(id) as id
FROM logs
WHERE metric = 'free space'
GROUP BY client ) s
ON l.id = s.id

对于外部查询,您还应该在 id 上有一个(如果可能的话是唯一的)索引,这使得连接能够使用索引。如果优化非常重要,您可能还需要 client, idid, client 的索引,用于子选择,尽管这不如无论如何,你必须扫描整个表格。

另请参阅 SQL JOIN vs IN performance?IN vs. JOIN with large rowsets有关使用 injoin 的讨论。

关于mysql - MySQL中 "LAST"聚合函数的建议解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10267838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com