October 7, 2023

Viiisit [Ruby on Rails] - Active Record Query (下)!

#ruby on rails#active record

繼續來探究 Active Record 在抓取資料上的方法!
繼上篇,我們已經學習了如何進行基本的資料查詢。
這篇將深入介紹一些查詢方法以及常見的解決 N+1 問題該如何解決,Let’s go!

Grouping

要在查詢 SQL 中應用 GROUP BY 子句,可以使用 group 方法。

  • SQL 中的 GROUP BY 子句用於將資料庫中的記錄按照一個或多個欄位的值分組,可以對每個不同組的記錄應用聚合函數,例如計算總和 SUM() 、平均值 AVG() 或計數 COUNT()
  • GROUP BY 子句通常與聚合函數一起使用,以便對分組的記錄執行統計操作,有助於整理和分析資料,並生成有意義的統計結果。

Eager Loading Associations 預先載入

Eager Loading Associations 是指在一次性查詢中預先載入一個或多個關聯模型的數據,以減少在後續操作中的查詢次數,從而提高應用程式的性能,通常用於解決 N+1 查詢問題。

N+1 查詢問題是什麼?

N+1 查詢問題是在 Active Record 查詢中常見的效能問題之一,通常出現在處理關聯數據的時候。
現在有兩個 Model UserPost ,他們之間有一個一對多的關係。

解決 N+1 查詢問題的方法

想要解決這樣的問題就要來應用 Eager Loading Associations,可以使用 includes 方法,讓 Active Record 確保所有指定的關聯,加載的查詢減到最少。除了 includes 方法,以下會說明其他種方式,來避免 N+1 查詢問題。


參考資料:
Active Record Query Interface_
Active Record 查詢
PJCHENder - [Rails] Active Record Query(SQL Query & Model 資料查詢)
Preload, Eagerload, Includes and Joins
Ruby on Rails - 用 Include 和 Join 避免 N+1 Query