2010-01-31 2 views
12

Quelle est la différence entre utiliser tinyint ou smallint (le cas échéant) plutôt que int? Ou limiter un champ char aux caractères minimum requis?Quelle est l'importance de sélectionner le plus petit type de données possible lors de la conception d'une base de données?

Ces choix affectent-ils les performances ou uniquement l'espace alloué?

+1

Quelle est votre targe? t plateforme? Combien d'enregistrements avez-vous l'intention de stocker? Des informations comme celles-ci incluses dans votre question peuvent aider à guider une réponse appropriée. –

+0

Je n'ai pas un besoin spécifique (encore, pourrait avoir bientôt) je veux juste apprendre –

Répondre

7

Sur un champ indexé avec une table significativement grande, la taille de votre champ peut avoir un impact important sur les performances. Sur un champ non indexé, ce n'est pas un bit aussi important, il doit encore écrire les données supplémentaires. Cela dit, le temps d'arrêt d'un redimensionnement d'une grande table peut durer plusieurs minutes ou plusieurs heures, donc ne le faites pas plus petit que vous ne l'imaginez.

5

Oui, cela affecte également les performances.

Si les index sont plus grands, il faut plus de temps pour les lire sur le disque, et moins peut être mis en cache dans la mémoire.

0

Les deux, dans certains cas. Mais, en fait, c'est plus une question de conception que de considérations de performances et de stockage. La raison pour laquelle vous ne faites pas tout varchar(...), c'est parce que cela ne reflète pas exactement le type de données qui devrait y être stocké, et cela réduit l'intégrité et la sécurité du type de vos données.

2

Je l'ai souvent vu ces trois défauts de conception de schéma causant des problèmes:

  1. Un champ varchar (n) a été créé avec n seulement assez grand pour l'échantillon de données que le concepteur avait tiré dans, pas population globale: amende dans les tests unitaires, troncatures silencieuses dans le monde réel.
  2. Un varchar (n) utilisé lorsque la taille des données est fixe. Cela masque les bogues de données.
  3. Un caractère (n) utilisé pour les données de longueur variable. Cela améliore les performances (en permettant aux données de s'asseoir en ligne dans la rangée sur le disque, mais tout le code client (et divers procs/vues stockés) doivent faire face aux problèmes de remplissage des espaces (et souvent ils ne le font pas). rembourrage peut être difficile Whitespace à traquer, car les espaces ne se présentent pas trop bien, et différentes bibliothèques/clients sql les supprimer.

Je ne l'ai jamais vu un bien intentionné (c.-à-pas seulement en utilisant varchar (255 Pour tous les cols, mais une sélection conservatrice de la mauvaise taille de données provoque des problèmes de performance significatifs Par facteur significatif, je veux dire facteur 10. Je vois régulièrement des défauts de conception algorithmique (indices manquants, envoi trop de données sur le fil, etc.

+0

varchar (255) devrait être exactement aussi efficace que varchar (10) parce que la taille, est juste une taille maximale. Mysql n'utilise que le nombre d'octets nécessaires pour stocker le contenu. Ceci est différent d'un char où mysql utilise exactement le nombre d'octets donné. –

Questions connexes