Maison >base de données >tutoriel mysql >Devriez-vous utiliser SET NOCOUNT ON dans SQL Server ?

Devriez-vous utiliser SET NOCOUNT ON dans SQL Server ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-19 22:56:10815parcourir

Should You Use SET NOCOUNT ON in 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 :

  • Utilisez IF EXISTS pour éviter les enregistrements en double
  • Utilisez WHERE NOT EXISTS pour limiter les résultats
  • Filtrer les mises à jour triviales
  • Effectuer l'accès aux tables avant ou après les opérations DML

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!

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