Maison >base de données >tutoriel mysql >Devriez-vous utiliser SET NOCOUNT ON dans SQL Server ?
SET NOCOUNT ON dans SQL Server : compromis
L'utilisation ou non de "SET NOCOUNT ON" dans SQL Server a toujours été un sujet de débat parmi les développeurs. Certains y voient un avantage en termes de performances, tandis que d’autres mettent en garde contre ses inconvénients potentiels.
Connaissances de base
La commande "SET NOCOUNT ON" supprime le message "nombre de lignes affectées xx lignes" qui apparaît après une opération DML. Ce message est un ensemble de résultats que le client doit traiter, ce qui entraîne une surcharge triviale mais mesurable. Dans les scénarios impliquant des déclencheurs ou des procédures stockées, plusieurs messages « lignes affectées xx lignes » peuvent provoquer des erreurs avec certains ORM, notamment MS Access et JPA.
Supporters de SET NOCOUNT ON
La sagesse conventionnelle veut que « SET NOCOUNT ON » devrait être utilisé pour améliorer les performances. L'argument est que, puisque le message « nombre de lignes affectées xx lignes » n'est pas nécessaire pour la plupart des applications, sa suppression peut réduire le trafic réseau et le temps de traitement. De plus, on pense que SET NOCOUNT ON évite les erreurs dans certains scénarios où le client attend un nombre spécifique de lignes.
Adversaires de SET NOCOUNT ON
Les opposants à « SET NOCOUNT ON » affirment que cela peut gêner les opérations avancées de base de données. Par exemple, la suppression des informations sur le nombre de lignes peut interférer avec :
De plus, SET NOCOUNT ON peut provoquer un comportement inattendu avec certains frameworks clients (tels que SqlDataAdapter et JPA d'ADO.NET). Ces frameworks attendent des informations sur le nombre de lignes, et leur absence peut entraîner des erreurs ou des résultats incorrects.
Impact sur les performances
Bien qu'il soit communément admis que SET NOCOUNT ON améliore les performances, les données suggèrent le contraire. Dans le protocole TDS, SET NOCOUNT ON n'enregistre que 9 octets par requête, alors que la commande elle-même fait 14 octets. Le message « nombre de lignes affectées xx lignes » n'est pas un paquet réseau séparé, mais une petite structure intégrée. L’amélioration des performances est donc minime.
Conclusion
L'utilisation ou non de « SET NOCOUNT ON » dépend des besoins et des considérations spécifiques. Cela peut être avantageux dans les scénarios où les performances sont critiques ou dans lesquels l'infrastructure client ne s'appuie pas sur les informations sur le nombre de lignes. Cependant, avant d’implémenter SET NOCOUNT ON globalement, assurez-vous de considérer ses inconvénients potentiels.
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!