Maison > Article > développement back-end > Pourquoi ma requête de base de données/sql Go est-elle considérablement plus lente qu'une requête psql Postgres directe ?
L'interrogation à l'aide de la base de données/sql est nettement plus lente que l'interrogation directe de la base de données
Malgré l'utilisation de requêtes identiques, il existe un écart de performances notable entre l'exécution d'un requête directement à l'aide de l'utilitaire psql de Postgres et en utilisant le package base de données/sql dans une application Go. Cet écart, où les requêtes qui prennent des millisecondes dans psql prennent des dizaines de millisecondes dans Go, pourrait être attribuée à des facteurs spécifiques dans la mise en œuvre.
Comprendre les connexions base de données/sql
database/sql initialise un pool de connexions pour établir des connexions à la base de données, plutôt que de créer une seule connexion. Le retard initial dans l'exécution des requêtes dans la base de données/sql est dû au fait que le pool commence avec zéro connexion ouverte. La première requête doit établir une connexion au serveur avant d'exécuter l'instruction SQL.
Les requêtes suivantes sont également confrontées à des retards car la connexion de la première requête n'a pas été rétablie dans le pool. Cela signifie que chaque requête suivante doit créer une nouvelle connexion avant d'exécuter la requête.
Libération des connexions vers le pool
Pour résoudre l'écart de performances, assurez-vous que les connexions sont libérés dans le pool après chaque requête. La libération d'une connexion implique de conserver la valeur de retour principale de db.Query et d'appeler ensuite la méthode Close dessus.
Initialisation du pool avec une connexion ouverte
Pour atténuer les délai initial, appelez Ping sur le pool de connexions immédiatement après l'initialisation. Cela garantit qu'au moins une connexion est disponible dans le pool.
Déclarations préparées
Bien que les requêtes simples sans arguments soient exécutées comme prévu, les requêtes avec des arguments dans la base de données/sql créez et exécutez réellement des instructions préparées sous le capot. Les instructions préparées offrent des avantages en termes de performances lors de l'exécution de la même requête plusieurs fois avec des arguments différents.
Résolution de la latence supplémentaire
Outre la gestion des connexions et les instructions préparées, il peut y avoir des facteurs de latence supplémentaires à considérer :
En abordant ces facteurs et en mettant en œuvre les recommandations à condition que les performances des requêtes utilisant base de données/sql puissent être considérablement améliorées, ce qui les rend comparables à l'interrogation directe de la base de données.
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!