1. 程式人生 > >數據庫查詢的 N + 1 問題

數據庫查詢的 N + 1 問題

clas lar () 多個 同時 pos laravel 問題 記錄

數據庫查詢的 N + 1 問題(轉載)

N + 1 問題在 ORM 中普遍存在,常見於遍歷操作中

N + 1 怎麽來

假設需要現在需要查找模型 A 的 n 條數據,而模型 A 又關聯了另外多個的模型,這裏假設 A 關聯了模型 B 和 C. 現在需要查找 n 條 A 的記錄(這裏需要 1 條 SQL 語句),同時把這 n 條記錄關聯的 B, C 記錄也查出來(這裏需要 n 條查詢 B 的語句和 n 條查詢 C 的語句),於是最後需要的 SQL 語句數目為 2n + 1.

2n 抽象出來,假設需要查找的是 n 條 A 的記錄(count(SQL) = 1),同時需要把與 A 關聯的 k 個模型的記錄也查找處理出來(count(SQL) = n * k

), 設 n * k = N, 最後查詢的 SQL 語句數目,即 N + 1

Laravel 中解決 N + 1 問題

  • 使用預加載功能
  • 使用 with() 方法,會做緩存
    • with() 中放需要查詢的關聯屬性

數據庫查詢的 N + 1 問題