Django: select_related と prefetch_related についてメモ - @kyanny's blog
以前メモしたが、やはり自分で手を動かさないと腹落ちしないので。
サンプルコードと実行例は以下に置いた。
モデルが Question has many Choice という関係であるとき、
select_related
は choice.question というアクセスで N+1 クエリが発生するのを防ぐ(JOIN によって)prefetch_related
は question.choice_set (choices) というアクセスで N+1 クエリが発生するのを防ぐ(IN によって)Prefetch
はprefetch_related
で関連先をとるときに WHERE で条件を指定したい場合に使う(WHERE question_id IN (...) AND votes = 0)