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

u1370743666 · 2016年07月15日 · 最后由 u1370743666 回复于 2016年07月18日 · 1733 次阅读
[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

共收到 6 条回复
1楼 已删除

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

Item.includes(:creator, :worker)

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

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

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

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

#6 楼 @mizuhashi

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册