Quelles sont les tailles optimales de varchar pour MySQL?

comment MySQL stocke-t-il un champ varchar? Puis-je supposer que le modèle suivant représente des tailles de stockage raisonnables:

1,2,4,8,16,32,64,128,255 (max)

Une clarification par exemple. Disons que j'ai un champ varchar de 20 caractères. MySQL lors de la création de ce champ, réserve-t-il de l'espace pour 32 octets(pas sûr s'il s'agit d'octets ou non) mais n'en autorise-t-il que 20?

je suppose que je m'inquiète l'optimisation de l'espace disque pour une table massive.

59
demandé sur ae. 2009-07-20 08:09:31

2 réponses

pour répondre à la question, sur le disque MySql utilise 1 + la taille qui est utilisée dans le champ pour stocker les données (donc si la colonne a été déclarée varchar(45), et le champ était" FooBar " il utiliserait 7 bytes sur le disque, sauf bien sûr vous où l'utilisation d'un jeu de caractères multibyte, où il serait en utilisant 14 bytes). Donc, peu importe comment vous déclarez vos colonnes, cela ne fera pas de différence sur la fin de stockage (vous avez déclaré que vous êtes inquiet de l'optimisation de disque pour une table massive). Cependant, elle permet de faire un différence dans les requêtes, car les VARCHARS sont convertis en CHAR quand MySql fait une table temporaire (tri, ordre, etc) et plus d'enregistrements que vous pouvez ajuster dans une page unique, moins de mémoire et plus rapides vos balayages de table seront.

47
répondu Kris Erickson 2009-07-20 05:30:45

MySQL stocke un champ varchar comme enregistrement de longueur variable, avec un préfixe d'un octet ou de deux octets pour indiquer la taille de l'enregistrement.

ayant un modèle de tailles de stockage ne fait pas vraiment de différence à la façon dont MySQL va fonctionner lorsqu'il s'agit de stockage de documents de longueur variable. La longueur spécifiée dans une déclaration varchar(x) déterminera simplement la longueur maximale des données qui peuvent être stockées. Fondamentalement, un varchar (16) n'est pas différent de un varchar (128).

cette page de manuel a une explication plus détaillée.

Edit: en ce qui concerne votre question mise à jour, la réponse est toujours la même. Un champ de type varchar ne utiliser autant d'espace disque que les données que vous stockez dans (plus un ou deux octets de surdébit). Peu importe que vous ayez une varchar(16) ou une varchar(128), si vous stockez une chaîne de 10 caractères, vous n'utiliserez que 10 octets (plus 1 ou 2 octets).) de l'espace disque.

22
répondu zombat 2009-07-20 06:06:21