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