Skip to content

N+1 Query Problem

N+1 查詢問題

01你是不是遇到這個 / THE SYMPTOM

我要列出 100 篇文章和每篇的作者,結果程式先查一次文章、再對每一篇各查一次作者,總共打了 101 次資料庫。畫面一多就慢到爆,但我不知道這狀況叫什麼。

↑ 如果你點頭了,你要的關鍵字就是 N+1 Query Problem

02這是什麼 / DEFINITION

一種資料庫效能反模式:先用 1 次查詢取得一批資料,再對其中每一筆各發 1 次查詢去拿關聯資料,於是 N 筆就多打 N 次、總共 N+1 次查詢,本來一兩次就能解決。

03什麼時候用 / WHEN TO USE

這不是「要用」的技巧,而是「要避免」的問題——當你發現列表頁很慢、資料庫查詢次數爆量、ORM(如 Prisma、Sequelize)在迴圈裡載關聯資料時,就要懷疑是它。

04怎麼跟 AI 說 / HOW TO ASK

直接複製這句、貼進 Claude Code / Cursor / Copilot / ChatGPT:

我這段列表查詢有 N+1 query 問題,幫我改成用 eager loading(一次 JOIN 或 include 把關聯資料一起撈),把查詢次數降到固定幾次。
05常見坑 / WATCH OUT

解法關鍵字是 eager loading(預先載入)或 JOIN/批次查詢,別跟「加快取」混為一談——快取只是遮住問題,根因是查詢次數。ORM 預設常是 lazy 載入關聯,最容易踩到。

06相關的詞 / RELATED