N+1問題とは
ループ処理の中でSQLを発行 → 大量増殖(ねずみ講式)
回避方法
- JOINする → 予めJOINしてテーブルをくっつけておく
- Eager Loadする → 予めSELECTで引っ張っておく
大量の別テーブルをループで回していくから増殖する
EagerLoadとLazyLoadの違い
EagerLoad
先にがばっとセレクトしておく方法
LazyLoad
都度都度SQLを発行する(ねずみ講式)
当たり前だが、EagerLoadの方がパフォーマンスが速い(SQLの発行数が少ない)
対策時の注意点
- メモリオーバーする可能性がある(スワップの発生)
- 必要に応じて件数を区切りながら処理する必要がある
0 件のコメント:
コメントを投稿