N+1 문제의 실험

4566 단어 MySQLRails

include?N+1 문제 실험을 해보도록 하겠습니다.


이번 사용자 모델 투고 이벤트
그 투고의 일람표를 얻은 시간은include?측정 방법의 유무가 얼마나 다른가
이번 목표야.

필요한 물건


1) seed를 사용하여 1000개의 이벤트 발표
db/seed
1000.times do |index|
    Event.create(:eventname =>'実験サンプル', :when => '10/14 9:00',:where => 'ゴンザのパソコン',:user_id => '1',:text => 'N+1問題解決しよう!')
end
2) Gemfile rack-mini-profiler를 사용하여 처리 속도 측정
Gemfile
gem 'rack-mini-profiler', require: false
config/initializers/rack_mini_profiler.rb 파일 만들기
config/initializers/rack_mini_profiler.rb
if Rails.env.development?
  require 'rack-mini-profiler'

  # initialization is skipped so trigger it
  Rack::MiniProfilerRails.initialize!(Rails.application)
end
지금 저희가 준비가 됐습니다.

include?방법이 없을 때


app/controller/event_controller.rb
class EventsController < ApplicationController
  #何もしない場合
  def index
   #投稿された全イベントを最新順に取得
   @events = Event.all.order("id DESC")
  end

렌더링: 이벤트 / index 3744.9에서 알 수 있어요. 3744.9 정말 좋아요.


@events = Event.all.order("id DESC").includes(:user)

include?방법이 있습니까?


app/controller/event_controller.rb
class EventsController < ApplicationController
  #include?メソッドありの場合
  def index
   #投稿された全イベントを最新順に取得
   @events = Event.all.order("id DESC").includes(:user)
  end

Rendering: 이벤트 / index 1164.4라고 쓰여 있는데 대략 처리가 3배 이상 됐어요!


투고 수가 10000건을 넘었습니다, include?만약 네가 없는 상황에서 모든 데이터를 얻고 싶다면, 너는 매우 놀랄 것이다.
다른 개선해야 할 점이 있지만 이번 실험은 나로 하여금 N+1문제를 확실하게 느끼게 했다!
그렇다면

좋은 웹페이지 즐겨찾기