2013-08-17 4 views
2

J'ai une base de données MySQL et je m'interroge sur les conséquences de la taille varchar sur mes performances de requête. Par exemple, quelle serait la différence entre un varchar(10) et un varchar(50) en termes de performances ou de taille de base de données. Par exemple, quelle est la différence entre un varchar(10) et un varchar(50)?Quelles sont les conséquences de varchar?

Si j'ai quelque chose comme 10000 lignes, cela affecterait-il beaucoup les performances ou est-ce insignifiant?

Note: Je ne fais pas de jointure sur cette colonne (si cela est important)

+0

Ne pas faire de jointures sur cette colonne peut faire partie de l'équation. Mon expérience est avec ces quelques lignes (10 000), la taille de votre varchar aura peu d'impact. De plus de conséquences est d'être sûr d'avoir de bons index. –

+0

@Tagazok. . . La performance dépend si les positions de caractères 11-50 sont remplies. Si les données sont identiques, les performances ne doivent pas être affectées par la taille maximale (pour deux tailles inférieures à 256). –

Répondre

4

varchar(10) signifie que les octets maximum autorisé est de 10 et varchar(50) signifie que les octets maximum autorisé est de 50. En gros, un varchar (10) n'est pas différent d'un disque de type varchar (128). Ainsi, de quelque manière que vous déclariez vos colonnes, il ne fera pas de différence sur la fin du stockage. Mais cela fera certainement une différence en faisant une requête.

De l'source:

Les valeurs dans les colonnes VARCHAR sont de longueur variable. La longueur peut être spécifiée comme une valeur comprise entre 0 et 255 avant MySQL 5.0.3, et entre 0 et 65 535 dans les versions 5.0.3 et ultérieures. La longueur maximale effective d'un VARCHAR dans MySQL 5.0.3 et ultérieur est soumise à la taille de ligne maximale (65 535 octets, qui est partagée entre toutes les colonnes) et le jeu de caractères utilisé.

+0

Ok, donc, vu qu'il n'y a pas du tout de jointures sur cette colonne, y a-t-il une différence en termes de performances si je stocke une longue chaîne plutôt qu'une courte? Je me demande si je devrais stocker quelque chose comme "tsk_put" ou "task_updated" (c'est une table qui enregistre les notifications). En outre, à un certain point, il y aura plus de 10000 lignes ... – Olivier

2

Il ne devrait pas y avoir de réelle différence de performance entre un VARCHAR(10) et VARCHAR(50). La vraie différence serait entre CHAR et VARCHAR.

http://dev.mysql.com/doc/refman/5.0/en/char.html

La longueur d'une colonne CHAR est fixée à la longueur que vous déclarez lorsque vous créez la table. La longueur peut être comprise entre 0 et 255. Lorsque les valeurs CHAR sont stockées, elles sont remplies à droite avec des espaces à la longueur spécifiée . Lorsque les valeurs CHAR sont récupérées, les espaces de fin sont supprimés.

Les valeurs dans les colonnes VARCHAR sont des chaînes de longueur variable. La longueur peut être spécifiée comme une valeur comprise entre 0 et 255 avant MySQL 5.0.3, et entre 0 et 65 535 dans les versions 5.0.3 et ultérieures. La longueur maximale effective d'un VARCHAR dans MySQL 5.0.3 et ultérieur est soumise à la taille de ligne maximale (65 535 octets, qui est partagée entre toutes les colonnes) et le jeu de caractères utilisé. Voir Section E.7.4, «Limites sur le nombre de colonnes du tableau et la ligne Taille».


Remplacement chaqueVARCHAR par CHAR colonnes pourrait améliorer les performances, depuis lors, les lignes auront la taille fixe, ce qui réduit la fragmentation et en quelque sorte d'optimiser l'accès aux disques.Cela dit, si vous avez seulement 10000 lignes, je doute que vous voyiez une différence réelle, sauf peut-être si vous avez des lignes inhabituellement "longues".

+0

* "Il devrait y avoir une réelle différence de performances entre un VARCHAR (10) et un VARCHAR (50)." * - Cela ne devrait pas être: * "Là ** ne devrait pas être ** une vraie différence ..." * –

+0

@PetrR. Bien sûr, c'était un stupide ... hum ... typo ... C'est corrigé maintenant. Je vous remercie ;) –

Questions connexes