MySQL性能在线游戏高分列表


MySQL Performance for Online Games Highscore Lists

我有一个关于制作"高分列表"的问题。

假设我有一个拥有100万活跃用户的在线游戏。每个用户都有从0到x的点。现在,我想显示一个排名列表。如果在一个页面中显示所有百万个条目,那么将其划分为Y个页面(每页100个条目=> 10,000个页面),这将是疯狂的。

我真的不知道如何解决它。

1。最简单的方法是加载所有1m条目

在一个SELECT中,获取结果并使用for循环查找当前用户并显示该特定页面。(但所有其他999.900项将保存在RAM中,即使它没有显示)。对于页面更改,我可以只使用结果数据,而不需要再次调用数据库。(所以我不关心这段时间点的变化)

SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points;

2。我的第二个想法是,单独加载每个页面,但我不知道

2.1如果真的是性能更好2.2如何获得正确的起始页,因为我只有用户的点,但没有真正的他的位置

那么我该如何解决这个问题呢?我真的不知道mysql能处理什么。多打几次小电话比打一次大电话好吗?我能保存大量的结果数据吗?第二个解决方案是在每次页面更改时更新所有更改点,但是我更关心性能,而不是总是更新list-data。

谢谢你的帮助!马库斯

使用分页。在SQL中,它是一个"限制"子句:

SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points LIMIT 0, 20;

上面的查询将只返回原始选择的前20行。

你可以通过get传递页面参数,像这样:Page =1或? Page =2,依此类推