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

How to tell ActiveRecord how to preload associations (either JOINs or separate queries) | makandra dev

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

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です