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));

你可能感兴趣的:(问题)