我怎样才能使这些 Active Record 查询更快?

How can I make these Active Record queries faster?

我正在使用 Active Record 向 postgres 数据库发送一些查询。

我有一个用户模型、一个业务模型和一个名为 UserBiz 的连接器。

我提到的查询遍历整个 UserBiz 集合,然后筛选出与用户提供的类别和搜索相匹配的企业。

 if !params[:category].blank?
    dataset = UserBiz.all.includes(:business, :user).select{|ub| (ub.business.category.downcase == params[:category].downcase) }
 else 
    dataset = UserBiz.all.includes(:business, :user)
 end

 if !params[:search].blank?
    dataset = dataset.select{|ub| (ub.business.summary.downcase.include? params[:search].downcase) || (ub.business.name.downcase.include? params[:search].downcase) }
 end

这些“有效”但问题是当我将 25 万个 UserBiz 放入我的数据库以查看发生了什么时,一次搜索或类别更改需要 15 秒。我怎样才能使这些查询更快?

它很慢,因为您从 UserBiz 中选择了所有数据。 尝试分页。 pagy,will_paginate等

select 在您的代码中将所有内容加载到内存中,这在处理大量记录时对性能非常不利。

你必须在数据库中进行过滤,像这样。

UserBiz
  .includes(:business, :user)
  .where("LOWER(businesses.category) = LOWER(?)", params[:category])