Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用最大计数优化主从查询?_Mysql_Sql - Fatal编程技术网

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(*)