Mysql 如何使用最大计数优化主从查询?
我有一个查询,以获取每个游戏的当前玩家数量,通过衡量玩家所占的玩家位置百分比来排序 事情是这样的:Mysql 如何使用最大计数优化主从查询?,mysql,sql,Mysql,Sql,我有一个查询,以获取每个游戏的当前玩家数量,通过衡量玩家所占的玩家位置百分比来排序 事情是这样的: SELECT g.* , COUNT( p.ID ) NUM_OF_PLAYERS FROM games g, players p WHERE g.ID = p.GAME_ID GROUP BY g.ID ORDER BY COUNT( p.ID ) / g.MAX_NUM_OF_PLAYERS DESC 大概需要4秒钟 解释给我的主要是: 如何加
SELECT
g.* , COUNT( p.ID ) NUM_OF_PLAYERS
FROM
games g,
players p
WHERE
g.ID = p.GAME_ID
GROUP BY
g.ID
ORDER BY
COUNT( p.ID ) / g.MAX_NUM_OF_PLAYERS DESC
大概需要4秒钟
解释给我的主要是:
如何加快查询速度?尝试此查询。速度快吗
select g.*,p.NUM_OF_PLAYERS NUM_OF_PLAYERS
from games g
left join
(
select GAME_ID, COUNT( ID ) NUM_OF_PLAYERS
from players group by GAME_ID
) p on (g.ID = p.GAME_ID)
ORDER BY
p.NUM_OF_PLAYERS/g.MAX_NUM_OF_PLAYERS DESC
按计数排序(p.ID)/MAX\u NUM\u玩家描述
这是什么?MAX_NUM_OF u PLAYERS
是常量吗?MAX_NUM_OF u PLAYERS是games table中的一列我有p.games id内部连接的索引。在这里很好,你是对的,旧式连接将优化FROM子句中的内部连接。问题是您正在使用表达式执行order by。数据库必须获取每一条记录,按游戏id分组(您可以使用group by p.game_id尝试查询),但随后必须对结果进行排序。要对其进行排序,必须将整个结果集加载到内存中,并运行一个排序算法,该算法最多可能是n*log(n)顺序。在players.Game\u id
上添加一个索引,并将内部选择更改为count(*)
。