🤔

【Rails】preloadとeager_loadの違いを説明できるようにする【面接対策】

に公開

技術面接で「preloadeager_loadの違いについて説明してください」と聞かれたら答えられますか?

Railsエンジニアの技術面接で頻出する技術質問の1つにpreloadeagar_loadの違いを問うものがあります。この記事ではそのような技術面接用に使える回答例を記載します。

面接で答えるべきポイント

両方ともN+1問題を解決するための関連読み込み方法であるということ
大きな違いはSQLの発行方法にあること

面接で聞かれた時用の台本

👨‍💼「preloadeager_loadの違いについて説明してください」

👨「どちらもN+1問題を解決するための関連読み込み処理になります。

大きな違いはSQLの発行方法です。

preloadは親テーブルと子テーブルを別々のクエリで取得して、Railsがキャッシュを持って解決します。
発行されるクエリは関連するテーブルの数と同じ回数だけ発行されます。

eager_loadLEFT JOINを使って結合して解決をします。
発行されるクエリは1回のみとなります。」

↓ 更に話していいのであれば

includeについても触れておく

👨「実務ではincludeを使用して書かれている箇所がありがちです。
includeは関連付けられているテーブルの中身を見てpreloadeager_loadをRails側で使い分けてくれる便利な一面もある一方で、クエリの動きを制御できないという面もあります。

開発チーム内のルールによりますが、単純な結合のみであればpreload、検索処理やソート処理であればeager_loadを記載しておいた方が将来的に安全にはなります。」

参考にさせていただいた記事

https://tech.stmn.co.jp/entry/2020/11/30/145159

https://techracho.bpsinc.jp/hachi8833/2023_09_27/89510

Discussion