N + 1 problem


Posted by Christy on 2022-02-02

什麼是 N + 1 problem?

背景:

假設有 User 及 review 兩份表格,使用 user_id 進行關聯,有一個查詢是「找出 20 歲以上使用者的所有評論」

執行狀況:

在查詢時,第一次先找出「所有 20 歲以上的使用者」,假設有五筆資料。

接著在這五筆資料裡面,再把評論撈出來,因此是從第一筆資料查詢到第五筆。

第一次查詢主要的 User 表格,以查詢到的結果,再查詢有關聯的副表格。

這篇文章 什么是 N+1 问题,以及如何解决 說得很好,其實應該要稱作「1 + N」問題。

也就是說,第一次查詢出來是 N 個紀錄,實際執行時需要查詢的次數是 N + 1 次(就執行順序來說,1 + N 次比較合理),這就叫做 N + 1 問題。

為什麼會有這個問題?

查到的資料大部分是說,可能是新手會犯的錯誤,其實用一個 SQL 的 join 就可以了,但是在 ORM 裡面,很有可能會寫出這樣的程式碼。

解決辦法

ORM 相對應的方案:預加載 preload with

參考資料:

Understanding and fixing N+1 query

[Day 16] 關聯資料表加載,解決 N+1 Query

什么是 N+1 问题,以及如何解决

GraphQL Design: 使用 DataLoader 提升效能 !

[科普文]什么是ORM中的N+1

ORM — N+1 Problem

心得

對這個問題還不是那麼熟悉,但是目前似乎有初步的理解了,放著之後慢慢研究。










Related Posts

Advanced JS (中)

Advanced JS (中)

Day 89

Day 89

propTypes、以 state 為中心去思考

propTypes、以 state 為中心去思考


Comments