`
qqdenghaigui
  • 浏览: 118855 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

N+1问题

 
阅读更多

找到前10个用户,并取出该用户的邮政编码

clients = Client.limit(10)

clients.each do |client|

  puts client.address.postcode

end

 

这样写相当于发了11条查询语句

select * from clients limit 10;

select postcode from address where client_id = client.id;

select postcode from address where client_id = client.id;

select postcode from address where client_id = client.id;

.......

 

解决方法

clients = Client.includes(:address).limit(10)

clients.each do |client|

  puts client.address.postcode

end

这样写发了2条查询语句

select * from clients limit 10;

select addresses.* from addresses where (addresses.client_id in (1,2,3,4,5,6,7,8,9,10));

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics