如何处理1+N问题

Table of Contents

1+n问题是什么?

1+n是执行一次查询获取n条主数据后,由于关联引起的执行n次查询从数据;它带来了性能问题;同时也做了不必要的浪费

应该怎样解决?

懒加载 一般来说,通过懒加载 可以部分缓解1+n带来的性能问题,其中hibernate 有lazy策略

外链接

left join (select * from users u left join department d where u.department_id = d.id)

关于Rails中N+1查询

使用 includes

// 这样就在读取users的时候也一次性的把departments都取出了

User.all.includes(:departments)

生成的sql语句:

SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC
SELECT `departments`.* FROM `departments` WHERE `departments`.`user_id` IN (2, 1) ORDER BY `plans`.`id` DESC

链接

Date: 2022-06-11 Sat 21:04