我正在制作一个排名应用程序,并通过这种方式获得用户在排名中的位置:
$sql = "SELECT fk_player_id FROM ".$prefix."_publicpoints
WHERE date BETWEEN '2013-01-01' AND '2013-12-31'
GROUP BY fk_player_id
HAVING SUM(points) > 235";
这是正常的,但有一个失败。如果我有 500.000 个用户的排名,查询会变得非常繁重。然后它必须遍历所有得分高于 235 的用户。假设 235 给出的位置为#345.879。那是很多行......我怎样才能更好地做到这一点?至少我什么时候调用数据库?
希望 4 帮助并提前感谢 :-)
最佳答案
3 种可能的解决方案,可能(或可能会或可能不会根据情况将它们组合在一起)
- 将索引添加到排名列
- 仅在排名发生变化时预先计算排名
- 使用 cron 作业预先计算排名 - 即使迟到 10 分钟也没关系。
如果它是一个通用的排名页面,您可以使用模板引擎预渲染页面并缓存它
您可以通过更多内存或配置查询和临时表的缓存来优化您的 mysql 性能
关于php - 以最佳方式获取用户当前位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799588/