我发现查询的加载时间太长,因此我想知道include的位置是否重要。
示例A:
people = Person.where(name: 'guillaume').includes(:jobs)
示例B:
people = Person.includes(:jobs).where(name: 'guillaume')
示例A更快吗,因为我应该减少人们的工作量?
答案 0 :(得分:2)
简短回答:否。
ActiveRecord会构建您的查询,并且只要您不需要记录,它就不会将最终的SQL查询发送到数据库以获取它们。您粘贴的两个查询是相同的。
如有疑问,您随时可以打开rails console
,在此处写查询并观察打印出来的查询。在您的示例中,它将类似于:
SELECT "people".* FROM "people" WHERE "people"."name" = $1 LIMIT $2 [["name", "guillaume"], ["LIMIT", 11]]
SELECT "jobs".* FROM "jobs" WHERE "jobs"."person_id" = 1
在两种情况下