Laravel 数据库查询 N+1问题

N+1 问题在 ORM 中普遍存在,常见于遍历操作中。

N+1 问题由来

假设需要现在需要查找模型 A 的 n 条数据,而模型 A 又关联了另外多个的模型,这里假设 A 关联了模型 B 和 C. 现在需要查找 n 条 A 的记录(这里需要 1 条 SQL 语句,例如 select * from A ),同时把这 n 条记录关联的 B, C 记录也查出来(这里需要 n 条查询 B 的语句和 n 条查询 C 的语句),于是最后需要的 SQL 语句数目为 2n + 1。

将 2n 抽象出来,假设需要查找的是 n 条 A 的记录(count(SQL) = 1),同时需要把与 A 关联的 k 个模型的记录也查找处理出来( count(SQL) = n * k ), 设 n * k = N, 最后查询的 SQL 语句数目,即 N + 1

参考
https://laravel-china.org/topics/7778/summary-using-the-laravel-development-tool-the-n-1-problem-of-the-orm-query

发布了145 篇原创文章 · 获赞 24 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/xiaobinqt/article/details/86495011