İçeriğe geç

ORM N+1 Sorgusu (ARCH5079)

Anahtar go.performance.orm-n-plus-one · Önem warning · Kategori performance

Bir sorgu sonucu üzerinde döngü kurup her satır için ilişkili veriyi ayrı sorguyla çekmek (N+1) veritabanını gereksiz tur sayısıyla boğar. İlişkiyi Preload ile önceden yükleyin.

func loadOrders(db *gorm.DB) []Order {
var orders []Order
db.Find(&orders)
for i := range orders {
db.Where("order_id = ?", orders[i].ID).Find(&orders[i].Items)
}
return orders
}
func loadOrders(db *gorm.DB) []Order {
var orders []Order
db.Preload("Items").Find(&orders)
return orders
}

İlişkili veriyi döngüde tek tek çekmek yerine Preload ile eager load edin.