javascript - 在MySQL中选择多行的前十个条目

标签 javascript php mysql sql performance

我有一个管理用户分数的表,例如:

    id   scoreA   scoreB    ...   scoreX
------  -------  -------    ...  -------
     1      ...      ...    ...      ...
     2      ...      ...    ...      ...

现在我想创建一个记分牌,可以按每个分数排序(仅降序)。

但是,我不能只查询条目并将它们发送到客户端(使用 Javascript 呈现它们),因为该表包含数千个条目,将所有这些条目发送到客户端会造成不合理的流量。

我得出的结论是,所有不相关的条目(可能不会出现在记分牌中的条目,因为分数太低)应该根据以下经验法则在服务器端丢弃:

If any of the scores is within the top ten for this specific score keep the entry.
If none of the scores is within the top ten for this specific score discard it.

现在我遇到了一个问题,是否可以使用 (My)SQL 有效地完成此操作,或者是否应该在查询数据库的 php 代码中进行此处理以保持整个过程的性能。

非常感谢任何帮助!

最佳答案

使用行而不是列来存储分数。在 userid、score 上有复合索引。日期时间列也很有用。考虑没有前 10 名的快照表,只是您建议的查找。因此查询中的 order by score descLimit 10

并不是说下面的引用是Covering Indexes 上的权威,但为了您的调查而抛出这个词。祝你好运。

关于javascript - 在MySQL中选择多行的前十个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32412712/

相关文章:

javascript - 如何使 Google map 信息窗口的内容完全适合所有浏览器?

javascript - 使用javascript将一组对象转换为一组新的对象?

php - session ID 更改保存到数据库

php - Laravel 路由变量限制为 17 个字符

mysql - 为什么连接字符串只能在开发机器上工作?

javascript - 为什么 JavaScript IIFE 需要括号?

javascript - 什么时候不应该使用事件委托(delegate)?

php - NetBeans IDE - PHP 提示问题

php - Laravel - 无效参数编号 : parameter was not defined

mysql - Eloquent:从 whereHas block 中选择字段失败