使用SQL检索一组记录,然后使用Rails对它们进行排序

时间:2013-12-22 07:49:51

标签: mysql sql ruby-on-rails

使用Rails 3.2和MariaDB。我的表有500,000行。在通常的查询中,我们将在其中添加order子句,如下所示:

# takes 4000ms to load, returns 100 records
@shops = Shop.where(:shop_type => 'fashion').order('overall_rating DESC')

如果删除order,则加载时间会大大减少:

# takes 20ms to load, returns 100 records
@shops = Shop.where(:shop_type => 'fashion')

是否可以首先检索@shops 100条记录,然后使用Rails按overall_rating DESC排序,而不涉及SQL?或者,将查询分为两部分:首先检索100条记录,然后对这组记录进行排序。这可以大大提高性能。

1 个答案:

答案 0 :(得分:1)

是的,排序集合是Ruby的Enumerable mixin。

的一部分
@shops = Shop.where(:shop_type => 'fashion')
@shops.sort! { |a,b| b.overall_rating <=> a.overall_rating }