LoginSignup
2
7

More than 5 years have passed since last update.

N + 1問題の検出とその対応(対応編)

Last updated at Posted at 2017-05-06

N+1問題

N+1 問題とは、Tree 状の情報を DB から読み出す際、全レコードの取得に一つ+各レコード分だけ SQL を発行してしまう問題のこと

余分なクエリを減らすために今回はN+1問題の検出とその対応について書いてく

N + 1問題の検出とその対応(検出編) 検出編はこちらから

rack-mini-profiler

N+1問題が発生する場合と発生しない場合でどれだけクエリ数が違うのか見てみる

Gemfile
gem "rack-mini-profiler"

bundle installしてください
見たいページにアクセスして左上に出る数字をクリックすると

N+1.png

こんな感じで表示にかかる時間やクエリの数、詳細がみれる
上のがN+1問題に未対応の結果

対応

実際に対応してみる

articles_controller.rb
class ArticlesController < ApplicationController

  def index
    @articles = Article.all.includes(:user)
  end
end

今回のN+1問題はviewでuserを呼び出してるのが原因なのでincludesでloadする
では、結果を見てみよう

64350f54-e317-4196-a542-fa1353e23501_png__2560×1600_.png

前回インストールしたbulletがN+1問題を検出しなくなった
クエリ数を見てみると5分の1ぐらいに減った

感想

見た感じだいぶクエリ数が減ったなあと思った
これからエンジニアになっていく上でこういうパフォーマンス的なところも意識できるようになっていきたい

2
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
7