[RUBY] Ich möchte das N + 1-Problem lösen, bei dem die Daten mehr gesammelt werden und der Vorgang langsam wird.

【Überblick】

1. Schlussfolgerung </ b>

2. Was ist das N + 1-Problem? </ B>

3. Warum N + 1 Problem </ b>

4. So lösen Sie das N + 1-Problem </ b>

  1. Fazit

Verwenden Sie die Includes-Methode </ b>!


2. Was ist das N + 1-Problem?

Dies ist ein Problem, das beim Verknüpfen auftritt. Wenn Sie eine Vereinigung bilden, ohne Maßnahmen zu ergreifen, werden A-Datenbank und B-Datenbank sein Alle nacheinander ansprechen Dies ist ein Problem, das viel Verarbeitung erfordert und den Vorgang verzögert.

Der Ursprung ist N + 1, da alle Datensätze in 1 + N Datensätzen zusammengefasst sind.


3. Warum N + 1 Problem

Nehmen Sie zum Beispiel das folgende Beispiel.

N+1 Problem




class Student < ActiveRecord::Base
 has_many :personals
end

class Personal < ActiveRecord::Base
 belongs_to :student
end

Student_Tabel

id student_name student_age
1 Ayabe 15
2 Sato 16
3 Ito 14

Personal_Tabel

id student_id student_personality
1 1 angry
2 2 gentle
3 3 smart
4 1 shy
5 1 forgetful

In diesem Staat,

@students = Student.all

Dann Student und Personal Nachdem Sie das Modell und die Datenbank einzeln zusammengestellt haben, Auch beim Nachdenken über die Ansicht mit dem Controller Ich werde dasselbe tun.

In diesem Formular (Schülertabelle 1 Mal + Datenreferenz 15 Mal) * 2 Mal Es bedeutet, dass es verarbeitet wird!


4. So lösen Sie das N + 1-Problem

Die Includes-Methode </ b> löst dieses Problem!

Vorerst können Sie alle zugehörigen Modelle zusammenbringen und einzeln zuordnen, wenn Sie sie in der Ansicht mit dem Controller wiedergeben.

Sie müssen nicht zweimal dasselbe tun, was den Prozess erleichtert. Das Obige ist eine kleine Datenmenge, es ist also keine große Sache, aber wenn es Tausende oder Zehntausende von ihnen gibt, wird die Verarbeitung anders sein.

Wie benutzt man

@students = Student.includes(:personal)

Modellname.includes(:紐づけたいModellname)

Nur!


Recommended Posts