Il y a un débat au travail de ma femme sur l'utilisation varchar(255)
de tous les varchar
champs dans les tables temporaires des procédures stockées. Fondamentalement, un camp veut utiliser 255 car cela fonctionnera toujours même si la définition change, et l'autre camp veut s'en tenir à la taille dans les tableaux source pour des améliorations potentielles des performances.
Le camp de performance est-il correct? Y a-t-il d'autres implications? Ils utilisent SQL Server.
sql-server
performance
datatypes
temporary-tables
Brian Nickel
la source
la source
MAX()
dans le mix.Réponses:
Selon la façon dont vous utilisez vos tables temporaires, vous pouvez rencontrer un problème de troncature des données.
Cet exemple est un peu artificiel, mais il illustre mon point. Exemple:
La table temporaire accepterait volontiers la nouvelle valeur varchar avec une longueur de 59. Cependant, votre table utilisateur ne pouvait pas. Selon la façon dont vous gérez cela dans votre procédure, cela peut entraîner une troncature ou une erreur.
À moins que vous ne documentiez et teniez compte de ces problèmes, votre procédure pourrait s'exécuter de manière inattendue.
Personnellement, je ne pense pas qu'il y ait une réponse à cette question qui soit correcte 100% du temps. Cela dépend vraiment de la façon dont vous utilisez ces tables temporaires.
J'espère que cela t'aides
la source
Je pencherais pour l'utilisation de la longueur réelle du champ.
J'ai lu récemment que les tables temporaires MySQL (je suppose que SQL Server est similaire) allouent suffisamment de mémoire pour stocker la longueur maximale possible pour chaque
varchar
colonne ... Une approche systématique pour allouer 200% à 500% de la mémoire requise pour lesvarchar
champs dans tous les procédures stockées semblent être un recours inutile aux ressources système. Si vous utilisez jamais une quantité importante de mémoire pour créer ces tables temporaires, vous pourriez alors réclamer inutilement la mémoire utilisée pour la mise en cache, créant plus de travail pour le serveur à un moment donné dans le futur, même après que les procédures de stockage soient terminées.Edit: Voir la réponse de Bill Karwin: /programming/1962310/importance-of-varchar-length-in-mysql-table
la source