2021年3月10日水曜日

SQLのN+1問題備忘録

N+1問題とは

ループ処理の中でSQLを発行 → 大量増殖(ねずみ講式)


回避方法

  • JOINする → 予めJOINしてテーブルをくっつけておく
  • Eager Loadする → 予めSELECTで引っ張っておく
大量の別テーブルをループで回していくから増殖する

EagerLoadとLazyLoadの違い

EagerLoad



先にがばっとセレクトしておく方法

LazyLoad

都度都度SQLを発行する(ねずみ講式)

当たり前だが、EagerLoadの方がパフォーマンスが速い(SQLの発行数が少ない)

対策時の注意点

  • メモリオーバーする可能性がある(スワップの発生)
  • 必要に応じて件数を区切りながら処理する必要がある

出典



0 件のコメント:

コメントを投稿