什麼是 N+1 問題?
N+1 問題是後端領域中非常常見、也非常重要的效能議題。
假設我們現在要查 10 篇貼文的內容以及前 5 則留言。
你會怎麼做呢?
如果我們先查一次主資料
然後再用迴圈跑 10 次,每次再查留言:
這樣總共會執行 11 次查詢(1 次查主資料,外加 10 次查留言)。
當資料量很小時,看起來好像還可以接受,但如果查詢量變大,例如需要查詢 10,000 篇貼文,那就會造成 10,001 次查詢,效能會呈線性成長,甚至造成資料庫負載暴增。
而且現實場景通常更複雜,例如我們還要查每個留言的作者,又需要再跑一次迴圈:
總共會經歷:
- 1 次查貼文
- 10 次查留言
- 50 次查留言的作者
一不小心就會變成 N x M 問題了。
