0

两个看似相同的查询(据像我这样的新手所知,但第一个在部分模板渲染时间总体上更快(除了 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。

4

1 回答 1

1

在第一个查询中,您链接了 .map 和 .reverse,而在第二个查询中,您使用了 .order('id DESC') .select(person_id),如果添加了 .reverse,则这是不必要的

于 2012-04-14T08:03:01.057 回答