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