web-dev-qa-db-fra.com

La taille variole est-elle dans des tables temporaires?

Il y a un débat sur le travail de ma femme sur l'utilisation de varchar(255) pour tous les champs varchar dans des tableaux temporaires dans des procédures stockées. Fondamentalement, un camp veut utiliser 255 car il fonctionnera toujours même si la définition change et que l'autre camp veut coller avec la taille dans les tables source des améliorations potentielles.

Le camp de performance est-il juste? Y a-t-il d'autres implications? Ils utilisent SQL Server.

16
Brian Nickel

Selon la manière dont vous utilisez vos tables TEMP, vous pouvez rencontrer un problème de troncature de données.

Cet exemple est un peu réveillé, mais il illustre mon point. Exemple:

  1. Votre colonne Table d'utilisateur est Varchar (50).
  2. Votre colonne Temp Table est Varchar (255).
  3. Vous avez un enregistrement avec 45 caractères dans cette colonne de votre table utilisateur.
  4. Dans votre procédure, vous concatéez-vous "- pour la victoire" jusqu'au bout de cette colonne, avant de fusionner cette table Temp dans votre table utilisateur.

La table TEMP accepterait volontiers la nouvelle valeur de Varchar avec une longueur de 59. Cependant, votre table utilisateur ne pouvait pas. En fonction de la façon dont vous gérez cela dans votre procédure, cela pourrait entraîner une troncature ou une erreur.

À moins que vous ne documensiez et ne tiendez pas compte de ces problèmes, votre procédure pourrait fonctionner de manière inattendue.

Personnellement, je ne pense pas qu'il y ait une réponse à cette question qui est correcte à 100% du temps. Cela dépend vraiment de la manière dont vous utilisez ces tables temporaires.

J'espère que cela t'aides

6
Matt M

utilisation varchar(255) Pour tous les champs varchar dans des tableaux temporaires dans des procédures stockées.

Je me pencherais vers l'utilisation de la longueur du champ actuel.

J'ai lu récemment que MySQL (je suppose que SQL Server est similaire) Tableaux TEMP attribue suffisamment de mémoire pour stocker la longueur maximale possible pour chaque colonne varchar ... une approche systématique de l'allocation de 200% à 500% de la La mémoire requise pour varchar champs dans toutes les procédures stockées semble être un tirage inutile sur les ressources système. Si vous utilisez déjà une quantité importante de mémoire créant ces tables temporaires, vous pouvez prétendre inutilement la mémoire utilisée pour la mise en cache, créant davantage de travaux pour le serveur à un moment donné, même après la fin des procédures de magasin.

Edit: Voir la réponse de Bill Karwin: https://stackoverflow.com/questions/1962310/importance-of-varchachar-lengthin-in -MySQL-Table

0
Matt