Ruby on Rails

【Ruby on Rails】gem Bullet を使ってN+1を解決

RailsでN+1問題を解決するには、Bulletというgemを使う

N+1問題とは?

N+1問題とは、ある一つのSQLで取得したデータに対して、データの数(N)さらにSQLを投げてしまいパフォーマンスが悪化してしまう問題のこと
JOINして1つのSQLを発行すれば解決できる問題だが、RailsなどのORラッパーを使っていると発生させてしまいがちで、下記理由から気づきにくい問題である

  • エラーが発生するわけではなく、機能的には問題がない
  • 開発時の少ないデータではパフォーマンスへの影響がすくないため、問題に気づきにくい

RailsでN+1問題に気づくためには

Rails Server の画面にSQLが出力されるので、それを見ていても気づくこともできる
が、どこのロジックで発生しているか等わかりにくい

Bulletというgemを使うと、開発環境でSQLのクエリを監視してくれ、N+1のクエリを見つけたら警告してくれる

https://github.com/flyerhzm/bullet

-Ruby on Rails