我正在深入研究Rails,我正在学习如何使用ActiveRecord,并且我已经创建了一个具有score属性的Player模型。我正试图找出一种有效的方法来查询数据库中得分最高的玩家。如果两个或更多球员并列最高分,我将需要所有球员。我可以通过先排序列表来弄清楚如何做到这一点,但我不确定是否有必要。检索一组得分最高的玩家最有效的方法是什么?
另外,在DB中为分数列创建索引会提高此查询的速度吗?
非常感谢你的智慧!
答案 0 :(得分:1)
Player.order("score DESC").limit(50)
应该很简单。看看rails guides。
或者更好的是,做这样的事情:
high_score = Player.maximum(:score)
high_score_players = Player.where(:score => high_score).all
答案 1 :(得分:1)
如果您在WHERE
或ORDER BY
中查询某列,则几乎总是有一个索引。如果没有索引,您的数据库必须进行表扫描,并且每一个都是昂贵的。
捕获得分最高的玩家可以通过两次操作完成,首先确定最高分,然后获取所有具有该分数的玩家:
@players = Player.where("score=(SELECT MAX(score) FROM #{Player.table_name}").all