当我第一次做这个查询并且表相对较小时,它运行得非常快,但随着时间的推移,随着更新表大小的增加(现在大约 6000 行),查询变得非常缓慢并且资源密集。我使用的服务器是来自 linode.com 的 1GB RAM VPS,实际上我没有等待足够长的时间来完成查询。
有趣的是,如果没有左连接中的额外条件 (SELECT MAX(u2.time)),它的运行时间 < 0.5 秒。
我在查询运行时查看了 mySQL 的进程列表,它一直显示为“正在发送数据”
这是查询:
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)