N+1 Sorgu (ARCH5050)
Anahtar go.orm.n-plus-one-query · Önem warning · Kategori orm
Döngü içinde her eleman için ayrı bir sorgu çalıştırmak (N+1), klasik ORM performans katilidir. Tek bir JOIN veya preload ile tüm ilişkili veriyi getirin.
Hatalı
Bölüm başlığı “Hatalı”var users []Userdb.Find(&users)for i := range users { db.Where("user_id = ?", users[i].ID).Find(&users[i].Orders)}var users []Userdb.Preload("Orders").Find(&users)Düzeltme
Bölüm başlığı “Düzeltme”İlişkili veriyi döngü içinde tek tek çekmek yerine Preload veya JOIN ile tek sorguda getirin.