Maison >développement back-end >Golang >Comment la fonction de préchargement de GORM peut-elle optimiser les requêtes avec des associations ?
Dans Go, GORM est un ORM populaire pour interagir avec les bases de données. Lorsque vous travaillez avec des associations dans GORM, il est important d'établir des relations appropriées entre les structures. Considérez les structures suivantes représentant une ville et un lieu :
type Place struct { ID int Name string Town Town } type Town struct { ID int Name string }
Ici, chaque ville peut avoir plusieurs lieux, tandis que chaque lieu appartient à une seule ville.
Supposons que vous souhaitiez interroger tous les lieux. et leurs informations sur la ville associée. Vous trouverez ci-dessous un exemple de base de données et le résultat attendu :
Tableau des lieux
id | name | town_id |
---|---|---|
1 | Place1 | 1 |
2 | Place2 | 1 |
Tableau des villes
id | name |
---|---|
1 | Town1 |
Résultat attendu :
id | name | Town |
---|---|---|
1 | Place1 | Town1 |
2 | Place2 | Town1 |
L'implémentation initiale tente d'interroger tous les lieux mais ne parvient pas à inclure les informations de ville associées :
db, _ := gorm.Open("sqlite3", "./data.db") defer db.Close() places := []Place{} db.Find(&places) fmt.Println(places)
La solution optimale implique d'utiliser la méthode de préchargement de GORM avant le Trouver une opération. Cela garantit que les données associées sont incluses dans la requête principale, éliminant ainsi le besoin de requêtes supplémentaires :
db.Preload("Town").Find(&places)
Avec cette approche, seules deux requêtes seront déclenchées, ce qui améliore considérablement les performances :
Journal des requêtes :
Time | Query |
---|---|
22.24ms | SELECT * FROM "places" |
0.92ms | SELECT * FROM "towns" WHERE "id" in ('1') |
Lorsque vous travaillez avec des associations dans GORM, il est crucial pour définir correctement les clés étrangères. L'utilisation de Preload vous permet d'inclure efficacement les informations associées dans vos requêtes, en préservant l'évolutivité et en optimisant les performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!