以最佳方式获取用户当前位置

时间:2013-02-10 16:00:40

标签: php mysql query-optimization

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

$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的位置。多数行......我怎么能以更好的方式做到这一点?至少我打电话给db?

希望提前4点帮助并提前致谢: - )

1 个答案:

答案 0 :(得分:1)

可能(或可能会或可能不会根据情况将它们组合在一起)的3种可能的解决方案

  • 将索引添加到排名列
  • 仅在更改时预先计算排名
  • 使用cron作业预先计算排名 - 如果迟到10分钟则无关紧要。

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

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