Rails:包含M2M表时的额外不必要的查询

时间:2010-12-26 08:31:39

标签: sql ruby-on-rails performance many-to-many find

假设我有一个Teachers表,其中包含:has_and_belongs_to_many与Students表的关系。我有一个students_teachers表,映射字段[teacher_id,student_id]。

当我进行一项发现并希望与所有学生一起培养所有老师时,我会做:

Teacher.find(:all, :include => :students)

虽然我已经包含了学生表,但我仍然最终得到了一个查询,提出了教师,然后n再次查询students_teachers表,而n是从第一个查询返回的教师数。

为什么Rails没有加入students_teachers表而是发送了这么多查询?

1 个答案:

答案 0 :(得分:0)

这是Rails急切加载的预期行为,以防止N + 1问题(即必须运行查询以查找所有教师,然后每位教师再查询一次以查找所有学生。)请参阅{{3} }。

如果您想在较少的查询中执行此操作,则需要使用:joins