includes / joins / preload / eager_load の違い
includes
where
/ joins
/ references
/ eagar_load
と組み合わせた場合には、eagar_load
と同じ動作を行い、それ以外の場合には preload
を行う。
joins
LEFT INNER JOIN
を行う。遅延フェッチを行う。
preload
キャッシュする。クエリは複数回に分かれる。即時にフェッチされる。(JOIN
は行われない。)
eager_load
LEFT OUTER JOIN
でキャッシュする。1 回のクエリで行う。即時にフェッチされる。
joins + preload
LEFT INNER JOIN
を行う。クエリは複数回に分かれる。即時にフェッチされる。
joins + eagar_load
LEFT INNER JOIN
を行う。1 回のクエリで行う。即時にフェッチされる。
参考:
ActiveRecord の joins と preload と includes と eager_load の違い – Qiita
eager_load, preload, includes の違い 自分用まとめ – Qiita
joins, includes, eager_load, preload の違い | やる気がストロングZERO
includes joins eager_load preload merge | yamarkz’s blog
INNER JOIN で eager loading – Qiita
ActiveRecord の preload, includes, eager_load | freedom-man
JOIN すべきかどうか、それが問題だ – #includes の振舞いを理解する 翻訳 | TechRacho
preload と eager_load で 1000000 億倍早くなったはなし | てくすた
Rails における内部結合、外部結合まとめ – Qiita
rails での eager_load の結合条件の追加はできますか? – スタック・オーバーフロー
ActiveRecord の preload と includes の仕組みについて – teratail
Eager Loading (preloading) – 3 ways to do it in Rails 3 & 4 & 5 | Arkency Blog
includes – ActiveRecord::QueryMethods | Ruby on Rails API [Official]
joins – ActiveRecord::QueryMethods | Ruby on Rails API [Official]
preload – ActiveRecord::QueryMethods | Ruby on Rails API [Official]
eager_load – ActiveRecord::QueryMethods | Ruby on Rails API [Official]
preload / eagar_load をテストする
参考:
関連付けの preload / eager-load をテストする2つの方法 翻訳 | TechRacho
Preloader
参考:
ActiveRecord で Scoped preloading – Qiita
find_by_sql したレコードで preload する方法 | おもしろ web サービス開発日記
rails/preloader.rb at 6-0-stable · rails/rails – GitHub
Tips
参考:
Ruby on Rails のhas_many 関連付けのフィルタテクニック4種 翻訳 | TechRacho
db-query-matchers
参考:
brigade/db-query-matchers: RSpec matchers for database queries – GitHub
関連付けの preload / eager-load をテストする2つの方法 翻訳 | TechRacho
BatchLoader
参考:
exAspArk/batch-loader: Powerful tool to avoid N+1 DB or HTTP queries – GitHub
N+1 クエリを「バッチング」で解決する BatchLoader gem 翻訳 | TechRacho
Batching – A powerful way to solve N+1 queries every Rubyist should know | Universe Engineering