1

我正在制作一个排名应用程序,并以这种方式获得用户在排名中的位置:

$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个帮助和感谢:-)

4

1 回答 1

1

3 种可能的解决方案,可能(或可能会或可能不会将它们结合在一起,具体取决于具体情况)

  • 将索引添加到排名列
  • 仅在等级发生变化时预先计算等级
  • 使用 cron 作业预先计算行列 - 如果迟到 10 分钟也没关系。

如果是通用排名页面,您可以使用模板引擎预渲染页面并缓存它

您可以使用更多内存或配置查询和临时表的缓存来优化您的 mysql 性能

于 2013-02-10T16:22:16.963 回答