梗概
- 请求一组数据,拿到多少id,想要拿到每条数据的关联数据,就要getdetail多少次
场景
- N+1问题 是在数据库查询中常见的性能问题,特别是在使用ORM(对象关系映射)时容易出现。它的主要症状是执行了许多不必要的查询,导致性能下降。
- 不好的影响:前端面临n+1问题就要消耗过多的网络资源
示例解释
假设我们有两个表:User
和 Balance
,它们通过 user_id
关联。我们需要查询所有年龄大于18岁的用户及其余额。
-
初始查询:首先查询符合条件的用户列表,这个查询执行一次。
SELECT * FROM User WHERE age > 18;
AI-generated code. Review and use carefully. .
-
后续查询:然后对每个用户再进行一次查询以获取其余额。如果有N个用户,这个查询会执行N次。
SELECT * FROM Balance WHERE user_id = ?;
解决方案
- 后端设计冗余
- 后端提前做连接查询,再返回
- child::dataloader