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

标签 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。那是很多行......我怎样才能更好地做到这一点?至少我什么时候调用数据库?

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

最佳答案

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

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

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

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

关于php - 以最佳方式获取用户当前位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799588/

相关文章:

php - 如何将 PHP 变量数组发送到 MySQL 数据库?

mysql - 数据丢失时删除行 2 joins away

php - MySQL 选择计数(来自另一个表)大于 X 的项目

PostgreSQL 多列索引未完全使用

php - 需要性能良好的SQL查询才能选择不符合条件的数据

php - 我如何在 DynamoDB 中使用分组依据?

php - 我如何为从 file_get_content 获得的页面调用 css

php - 优化mysql随机查询

我认为 PHP 错误无法弄清楚与 SQL 相关的东西

python - MySQL 5.6 停止和启动(重新启动)有密码的服务器,在 Windows 7 中,使用 Python