ActiveRecordのincludes, preload, eager_load の個人的な使い分けのブログから
・preloadは指定したアソシエーションを別クエリで取得してキャッシュ
・eager_loadは指定したアソシエーションをleft joinで取得しキャッシュ
・spwanでActive::Relationでリレーションを追加し行く
実行時
・ここがActive Recordのメソッド委譲系あたりっぽい(メタプロ使ってリレーションで取得してそうな気がする)
・例えばto_aする
・recordというメソッドに委譲
・loadを呼び出し
・exec_queriesの呼び出し
・その中でexec_main_queryというのを呼び出しており、eager_loding?の判定を行う
・belongs_to, has_one アソシエーションについては eager_load
・has_many なアソシエーションについてはpreloadする
・has_manyのリレーションでeager loadするとスロークエリになりやすい→left joinなのでhas_manyだと重複含む
・それをdistinctで絞り込むのだが、そこがスロークエリになりやすい→だからidだけ取ってきてdistinctするのか