【发布时间】:2013-12-22 07:49:51
【问题描述】:
使用 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?或者,将查询分为 2 个部分:首先检索 100 条记录,然后对这组记录进行排序。这可以大大提高性能。
【问题讨论】:
-
你试过在
overall_rating上添加索引 -
已编入索引。我正在为这个问题尝试不同的解决方案:stackoverflow.com/questions/20727363/…
-
@Victor - 这是一个自引用链接。
标签: mysql sql ruby-on-rails