如何避免 N+1 查询问题
1. 问题定义
N+1查询问题是ORM框架中常见的性能瓶颈,指:
- 1次查询获取主表数据(1)
- N次查询获取关联表数据(N)
- 导致总查询次数为N+1
典型场景:获取10个用户及其订单,1次查用户 + 10次查订单 = 11次查询
2. 根本原因分析
2.1 ORM的延迟加载机制
- 延迟加载(Lazy Loading)是默认行为
- 访问关联属性时才触发查询
- 循环中访问导致多次查询
2.2 对象-关系阻抗不匹配
- 面向对象与关系型数据库的思维差异
- ORM试图透明化关联关系
- 实际执行时暴露底层查询问题
3. 解决方案
3.1 预加载(Eager Loading)