gpt4 book ai didi

mysql - MySQL 查询的最大 CPU 使用率和 >60s 执行

转载 作者:太空狗 更新时间:2023-10-29 12:20:25 26 4
gpt4 key购买 nike

当我第一次进行此查询并且表相对较小时,它运行得非常快,但随着时间的推移,随着更新表大小的增加(现在大约有 6000 行),查询变得极其缓慢且占用大量资源。我使用的服务器是来自 linode.com 的 1GB RAM VPS,实际上我没有等待足够长的时间来完成查询。

有趣的是,如果左连接中没有额外条件 (SELECT MAX(u2.time)),它会在 < 0.5 秒内运行。

查询运行时查看了mySQL的进程列表,一直显示为'Sending Data'

这是查询:

SELECT 
s.ID as sid, s.country AS country,
s.name AS name, s.ip AS ip,
u.connPlayers AS cp, u.maxPlayers AS mp
FROM servers AS s

LEFT JOIN updates AS u
ON u.serverID = s.ID
AND u.time =
(SELECT MAX(u2.time)
FROM updates AS u2
WHERE u2.serverID = s.ID)
ORDER BY RAND(MINUTE(NOW()))
LIMIT 0,10

这是 my.cnf 文件:http://redream.co.nz/my.cnf

表结构:

服务器表(20 行)

Field   Type
ID int(10) Unique Key
ip varchar(200)
country varchar(2)
name varchar(600)
motd varchar(600)
desc mediumtext
version varchar(600)

更新表格(6000 行)

Field       Type
serverID int(10)
ping int(10)
time int(14)
uptime int(10)
connPlayers int(10)
maxPlayers int(10)
uptime int(14)

最佳答案

子查询 Select MAX(... 正在为 updatesservers 叉积的每一行运行 serversupdates 的交叉乘积,然后再次 updates。MySQL 的优化器不是很复杂。

更新:我的 SQL 有点生疏,但您可以尝试这样的操作:

SELECT
/* blah */
FROM
servrs s
LEFT JOIN
updates u
ON
u.serverID = s.ID
GROUP BY s.serverID
HAVING MAX(u.time)

我手边没有 MySQL 实例,因此您可能需要稍微调整一下才能使其正常工作。

Update2:仔细看代码后,我觉得这个查询的开销比我原来估计的要大。更新了这个答案的顶部。

关于mysql - MySQL 查询的最大 CPU 使用率和 >60s 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10973573/

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