2
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?