查询集合父模型的最有效方法是什么?

时间:2019-08-06 18:17:38

标签: ruby-on-rails

我正在尝试从一组记录中查询一组父母。 我有属于对话的用户消息,我的生产数据库有成千上万个chat_messages和数以千计的对话,我想减轻Rails应用程序和MySQL数据库的压力。

我目前找到了两种使用Rub的map函数来实现这一目标的工作方法,其次是使用2个单独的查询

使用Ruby的map方法:

class Report
  # ...

  def conversations
    messages.map(&:conversation).uniq
  end

  # ...
end

使用2个独立的查询:

class Report
  # ...

  def conversations
    Conversation.where(id: messages.pluck(:conversation_id))
  end

  # ...
end

这两种方法都能满足我的要求,但是性能对我很重要,因此我想防止出现任何疯狂的性能问题。

1 个答案:

答案 0 :(得分:0)

对我来说,实现此目标的最佳方法是以下请求:

Conversation.where(id: messages.select(:conversation_id))

pluck比使用普通红宝石或不重复使用pluck的结果时要快。

当您需要为ActiveRecord查询重用结果时,处理ActiveRecord集合总是更好/更快。

但是在这两种情况下,我猜总比使用distinct会占用更多内存要好。