一、概述
N+1的问题主要出现在发起关联查询时,例如:
select * from CUSTOMERS;
select * from ORDERS where CUSTOMER_ID=1;
select * from ORDERS where CUSTOMER_ID=2;
select * from ORDERS where CUSTOMER_ID=3;
select * from ORDERS where CUSTOMER_ID=4;
二、出现场景
1、Hibernate的session缓存
2、mybatis的association关联配置
3、多层服务调用
二、解决办法
1、使用左外链接
select * from CUSTOMERS left outer join ORDERS
on CUSTOMERS.ID=ORDERS.CUSTOMER_ID
2、两次查询
SELECT * FROM CUSTOMERS WHERE ...
SELECT * FROM ORDERS WHERE CUSTOMER_ID IN (1, 2, 3, 4, 5, ...)