我正在尝试从一组记录中查询一组父母。 我有属于对话的用户消息,我的生产数据库有成千上万个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
这两种方法都能满足我的要求,但是性能对我很重要,因此我想防止出现任何疯狂的性能问题。
答案 0 :(得分:0)
对我来说,实现此目标的最佳方法是以下请求:
Conversation.where(id: messages.select(:conversation_id))
pluck
比使用普通红宝石或不重复使用pluck
的结果时要快。
当您需要为ActiveRecord
查询重用结果时,处理ActiveRecord
集合总是更好/更快。
但是在这两种情况下,我猜总比使用distinct
会占用更多内存要好。