[笔记] Spring Data JPA 的 N+1 Problem (2)

什么是 N+1 Query Problem

One query for parents and N queries for children

真实世界中的 N+1

网路上关于 N+1 Query Problem 的介绍已经非常多,这边想要多用现实生活的例子阐述。
日常要出门的时候,通常会带上一个背包,而背包容量有限,所以我们会尽可能地只携带必需物品,而且重量越少越好。
有此可知有两个因素会决定抵达目的地的时间

携带的物品重量 (影响行走的速度)翻找在家中的物品 (影响出门的时间,东西越多越杂越难找,就会越晚出门)

然而就算事前做了这么多的準备,抵达目的地的时候,还是有可能会发现有东西没带到,逼不得已的时候,需要再往返家里一趟。

N+1 Query Problem 的成因

因为想要加快单次查询的时间,并且尽可能减少要查询的资讯量,以利查询加速。

在这样的背景之下,就会容易遇到 N+1 Query,透过上面的故事可以了解到,N+1 并不是一个如同妖魔的存在,它的存在其实也是以效能为出发点,如果当次的查询结果中,并没有包含所需要的资料,而且在每次需要使用到的时候才发现这件事,回到资料库中再做一次查询。

这样的过程,就是 N+1 Query,没有办法只使用 1 次的 Query 就取得全部需要的资料,而被迫得要再度执行 N 次的查询才可以。

只使用1次查询真的就没问题了吗?

一样要回过头看看真实世界的故事,当今天想要减少往返家里的次数,所以决定要一口气準备好全部的东西,这样才不会面临一直跑回家的情况,但这种决定,却会大幅增加当次出门的时间,而且过程中会携带非常多的资料,而且大多数或许是用不到的(资料浪费)


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章