🤔
【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