🤔
【Rails】preloadとeager_loadの違いを説明できるようにする【面接対策】
技術面接で「preloadとeager_loadの違いについて説明してください」と聞かれたら答えられますか?
Railsエンジニアの技術面接で頻出する技術質問の1つにpreloadとeagar_loadの違いを問うものがあります。この記事ではそのような技術面接用に使える回答例を記載します。
面接で答えるべきポイント
両方ともN+1問題を解決するための関連読み込み方法であるということ
大きな違いはSQLの発行方法にあること
面接で聞かれた時用の台本
👨💼「preloadとeager_loadの違いについて説明してください」
👨「どちらもN+1問題を解決するための関連読み込み処理になります。
大きな違いはSQLの発行方法です。
preloadは親テーブルと子テーブルを別々のクエリで取得して、Railsがキャッシュを持って解決します。
発行されるクエリは関連するテーブルの数と同じ回数だけ発行されます。
eager_loadはLEFT JOINを使って結合して解決をします。
発行されるクエリは1回のみとなります。」
↓ 更に話していいのであれば
includeについても触れておく
👨「実務ではincludeを使用して書かれている箇所がありがちです。
includeは関連付けられているテーブルの中身を見てpreloadとeager_loadをRails側で使い分けてくれる便利な一面もある一方で、クエリの動きを制御できないという面もあります。
開発チーム内のルールによりますが、単純な結合のみであればpreload、検索処理やソート処理であればeager_loadを記載しておいた方が将来的に安全にはなります。」
参考にさせていただいた記事
Discussion