varchar (255) contre tinytext / tinyblob et varchar (65535) contre blob / text

91

Par définition:

VARCHAR: La plage de longueur est comprise entre 1 et 255 caractères. Les valeurs VARCHAR sont triées et comparées de manière insensible à la casse, sauf si le mot clé BINARY est indiqué. x + 1 octets
TINYBLOB, TINYTEXT: une colonne BLOB ou TEXT d'une longueur maximale de 255 (2 ^ 8 - 1) caractères x + 1 octets

Sur cette base, je crée le tableau suivant:

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255),
  `lastname` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Ou est-il préférable de créer un varchar ou un tinytext et pourquoi ?

Est-ce la même chose pour:

VARCHAR: La plage de longueur est> 255 caractères. Les valeurs VARCHAR sont triées et comparées de manière insensible à la casse, sauf si le mot clé BINARY est indiqué. x + 2 octets
BLOB, TEXT Colonne BLOB ou TEXT d'une longueur maximale de 65535 (2 ^ 16 - 1) caractères x + 2 octets

Tech4Wilco
la source
VARCHAR a besoin de moins de mémoire, mais ils seront généralement entièrement lus en mémoire, donc à la fin, VARCHAR peut encore utiliser plus de mémoire. Ils sont tous les deux différents. Vous utilisez BLOB pour stocker des données binaires comme une image, de l'audio et d'autres données multimédias. et VARCHAR pour stocker du texte de n'importe quelle taille jusqu'à la limite.
Book Of Zeus

Réponses:

10

Dans ce cas, varcharc'est mieux.

Notez que cela varcharpeut être de 1 à 65535 caractères.

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

Les objets blob sont enregistrés dans une section distincte du fichier.
Ils nécessitent une lecture de fichier supplémentaire à inclure dans les données.
Pour cette raison, varchar est récupéré beaucoup plus rapidement.

Si vous avez un grand blob auquel vous accédez rarement, un blob a plus de sens.
Le stockage des données blob dans un fichier séparé (une partie du) fichier permet à votre fichier de données de base d'être plus petit et donc d'être récupéré plus rapidement.

Johan
la source
Que ce soit mieux ou non dépend de vos modèles d'accès aux données.
Michael Mior
1
Quel fichier séparé cela pourrait-il être?
glglgl
1
Les objets blob ne sont pas enregistrés dans un fichier séparé. Mais ils sont stockés dans un emplacement physique distinct du reste des colonnes.
Michael Mior
1
Notez que cela ne dépend pas seulement de la fréquence d'accès, mais également des opérations effectuées sur les données. Par exemple, toute requête nécessitant une analyse de table (ce qui est généralement mauvais de toute façon), mais pas la colonne de texte, sera aggravée par le plus grand volume de données analysées.
Michael Mior
1
Je soupçonne également que les filesorts n'utilisant pas cette colonne peuvent être plus efficaces si les données sont stockées hors page, bien que je ne sois pas sûr que l'optimiseur de requêtes soit suffisamment intelligent pour ne pas extraire ces données.
Michael Mior