Rails ActiveRecord n+1 问题 多次 includes 同一个表

Unknow user · July 15, 2016 · Last by u1370743666 replied at July 18, 2016 · 1952 hits
[4] pry(main)> Item.includes(:creator).includes(:worker)
  Item Load (0.5ms)  SELECT "items".* FROM "items"
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" IN (1, 2)
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" IN (1, 2)

2,3 查询语句可以优化成一个吗?还是说只能手动收集 user_ids

1 Floor has deleted

看起来没法进一步优化了,不过 active record 的有查询缓存的,应该没事。

Item.includes(:creator, :worker)

@u1370743666 对集合的操作,很难拆分条件。

这个不是 n+1 问题,是解决了 n+1 问题,就算有 1000 个 Item,你的 sql 也只有这 3 条

Unknow user #5 July 17, 2016

#3 楼 @mimosa 这个我试过,结果是一样的,都是 3 条。 #4 楼 @mizuhashi 嗯,我的意思就是在解决 n+1 问题的方案中能否再次优化。看来是不能的

#5 楼 @u1370743666 你觉得应该怎么优化,判断语意是一样的然后减少一次查询?你要怎么用程序做到这件事,运行的成本又是多少?

Unknow user #7 July 18, 2016

#6 楼 @mizuhashi

ActiveRecord n+1 问题 多次 includes 同一个表

You need to Sign in before reply, if you don't have an account, please Sign up first.