我想知道pluck
和select
之间有什么区别。
基于以下代码,第一个代码比第二个快。但我不知道它是什么原因。
c_ids = [123, 456]
# Good
m_ids = GcMission.joins(:mission).where(character: c_ids).select(:mission_id)
QuestionMission.where(mission_id: m_ids).pluck(:question_id)
# Bad
m_ids = GcMission.joins(:mission).where(character: c_ids).pluck(:mission_id)
QuestionMission.where(mission_id: m_ids).pluck(:question_id)
问题不同。
经过多次调查,
m_ids = GcMission.joins(:mission).where(character: c_ids).select(:mission_id)
QuestionSetMission.where(mission_id: mission_ids).pluck(:question_set_id)
上面的代码将执行延迟查询,它只会查询一次。
但坏人会做两次。