LoginSignup
0
0

More than 3 years have passed since last update.

Ruby on Rails [学習記録-第11章-]

Posted at

n+1問題

  • モデルを利用してデータベースの情報にアクセスする際にはSQLが発行されます。SQLが発行されるたびにデータベースに対して通信が走るので、SQLが大量に発行されれば処理が重くなります。n+1問題とは、データを呼び出す際に大量のSQLが発行されてしまう問題のことです。
  • 今回の場合、indexアクションで全ツイートを取得する1回に加えて、アソシエーションを利用してツイートの数だけユーザー情報を呼び出しています。つまり、現在の状態だとapp数+1回SQLが発行されています。この状態のことをn+1問題と言います。

includesメソッド

  • includesメソッドはn+1問題を解消することができる。
  • 指定された関連モデルをまとめて取得することで、SQLの発行回数を減らすことができる。
  • 書き方は、includes(:モデル名)
  • appsテーブルのレコードは必ず1つのusersテーブルのレコードに属しているので、includesメソッドを利用することでappsテーブルのレコードを取得する段階で関連するusersテーブルのレコードも一度に取得することができる。
apps_controller.rb
class TweetsController < ApplicationController

  def index
    @tweets = Tweet.includes(:user).page(params[:page]).per(5).order("created_at DESC")
  end

  #以下省略

end
0
0
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
0
0