两个看似相同的查询(据像我这样的新手所知,但第一个在部分模板渲染时间总体上更快(除了 ids 语句没有其他变化)。此外,当通过 rails 控制台进行测试时,后者将明显运行一个查询,前者不会。我不明白为什么——以及为什么第一个语句比第二个快几毫秒——尽管我猜这是由于更短的方法链接以获得相同的结果。
更新:我的错。他们没有运行相同的查询,但有趣的是,所有列上的选择比一列上的选择更快。与方法链接相比,这可能是微不足道的差异。
ids = current_user.activities.map(&:person_id).reverse
SELECT "activities".* FROM "activities" WHERE "activities"."user_id" = 1
SELECT "people".* FROM "people" WHERE "people"."id" IN (1, 4, 12, 15, 3, 14, 17, 10, 5, 6) Rendered activities/_activities.html.haml (7.4ms)
ids = current_user.activities.order('id DESC').select{person_id}.map(&:person_id)
SELECT "activities"."person_id" FROM "activities" WHERE "activities"."user_id" = 1 ORDER BY id DESC
SELECT "people".* FROM "people" WHERE "people"."id" IN (1, 4, 12, 15, 3, 14, 17, 10, 5, 6) Rendered activities/_activities.html.haml (10.3ms)
该语句的目的是按照人员在活动表中出现的顺序(在其 PK 上)检索对人员的外键引用。注意:我将Squeel用于 SQL。