iT邦幫忙

0

[筆記] Spring Data JPA 的 N+1 Problem (2)

timm 2022-10-02 18:07:241150 瀏覽
  • 分享至 

  • xImage
  •  

什麼是 N+1 Query Problem

One query for parents and N queries for children

真實世界中的 N+1

網路上關於 N+1 Query Problem 的介紹已經非常多,這邊想要多用現實生活的例子闡述。
日常要出門的時候,通常會帶上一個背包,而背包容量有限,所以我們會盡可能地只攜帶必需物品,而且重量越少越好。
有此可知有兩個因素會決定抵達目的地的時間

  1. 攜帶的物品重量 (影響行走的速度)
  2. 翻找在家中的物品 (影響出門的時間,東西越多越雜越難找,就會越晚出門)

然而就算事前做了這麼多的準備,抵達目的地的時候,還是有可能會發現有東西沒帶到,逼不得已的時候,需要再往返家裡一趟。

N+1 Query Problem 的成因

因為想要加快單次查詢的時間,並且盡可能減少要查詢的資訊量,以利查詢加速。

在這樣的背景之下,就會容易遇到 N+1 Query,透過上面的故事可以了解到,N+1 並不是一個如同妖魔的存在,它的存在其實也是以效能為出發點,如果當次的查詢結果中,並沒有包含所需要的資料,而且在每次需要使用到的時候才發現這件事,回到資料庫中再做一次查詢。

這樣的過程,就是 N+1 Query,沒有辦法只使用 1 次的 Query 就取得全部需要的資料,而被迫得要再度執行 N 次的查詢才可以。

只使用1次查詢真的就沒問題了嗎?

一樣要回過頭看看真實世界的故事,當今天想要減少往返家裡的次數,所以決定要一口氣準備好全部的東西,這樣才不會面臨一直跑回家的情況,但這種決定,卻會大幅增加當次出門的時間,而且過程中會攜帶非常多的資料,而且大多數或許是用不到的(資料浪費)


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言