Maison >développement back-end >Golang >Comment la fonction de préchargement de GORM peut-elle optimiser les requêtes avec des associations ?

Comment la fonction de préchargement de GORM peut-elle optimiser les requêtes avec des associations ?

DDD
DDDoriginal
2024-12-10 02:47:09113parcourir

How Can GORM's Preload Function Optimize Queries with Associations?

Associations ORM GORM Golang

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

Initial Implémentation

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)

Utilisation du préchargement

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')

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn