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>
Verwenden Sie die Includes-Methode </ b>!
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.
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!
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