数据库查询的 N + 1 问题

Posted lei12138

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库查询的 N + 1 问题相关的知识,希望对你有一定的参考价值。

数据库查询的 N + 1 问题(转载)

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

N + 1 怎么来

假设需要现在需要查找模型 A 的 n 条数据,而模型 A 又关联了另外多个的模型,这里假设 A 关联了模型 B 和 C. 现在需要查找 n 条 A 的记录(这里需要 1 条 SQL 语句),同时把这 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

Laravel 中解决 N + 1 问题

  • 使用预加载功能
  • 使用 with() 方法,会做缓存
    • with() 中放需要查询的关联属性

以上是关于数据库查询的 N + 1 问题的主要内容,如果未能解决你的问题,请参考以下文章

你如何在 python 中处理 graphql 查询和片段?

这个代码片段有啥作用?

在 Java 的 GraphQL 查询中添加片段

解决方案电影标题中缺少代码的片段,完成挑战更多[关闭]

Microsoft SQL Server 代码片段收集

推进学说代码片段