Maison > base de données > tutoriel mysql > Pourquoi la limite de longueur de l'index varchar de MySQL diffère-t-elle entre les versions ?

Pourquoi la limite de longueur de l'index varchar de MySQL diffère-t-elle entre les versions ?

Susan Sarandon
Libérer: 2024-11-22 00:44:14
original
616 Les gens l'ont consulté

Why Does MySQL's varchar Index Length Limit Differ Between Versions?

Longueur de l'index varchar MySQL

Lors de l'exploration d'un problème de performances de requête SQL, l'utilisateur a tenté d'optimiser la requête en ajoutant un index à la colonne products.name, qui est défini comme varchar(512). L'index d'origine, spécifié comme product_name_idx (name(512)), a entraîné la non-utilisation de l'index pour le tri, car il a été identifié comme un index de préfixe.

Pour résoudre ce problème, l'utilisateur a essayé de tronquer la colonne de nom. à varchar(255). Suite à ce changement, l'instruction EXPLAIN suivante a indiqué qu'un index était utilisé.

Ce comportement découle de l'hypothèse formulée par MySQL concernant la longueur des caractères UTF-8. Dans MySQL, la taille maximale de l'index pour une seule colonne est de 767 octets. Avant MySQL 8.0, le jeu de caractères utf8 était limité à un maximum de 3 octets par caractère. Cependant, avec MySQL 8.0, cela a changé et utf8mb3 est désormais obsolète et remplacé par utf8mb4, qui prend en charge jusqu'à 4 octets par caractère.

Dans les versions MySQL antérieures à 8.0, spécifier une longueur d'index supérieure à la longueur par défaut. de 255 caractères pour une colonne varchar(255) entraînerait une erreur. En effet, MySQL suppose 3 octets par caractère pour UTF-8 et un index de 256 caractères dépasserait la limite de 767 octets.

Avec MySQL 8.0 et le jeu de caractères utf8mb4, l'hypothèse de 3 octets par caractère s'applique toujours. . Cependant, avec l'introduction de formats de lignes compressés et dynamiques, les préfixes de clé d'index peuvent atteindre 3 072 octets. Par conséquent, des index peuvent être créés sur des colonnes varchar avec un plus grand nombre de caractères.

Pour résumer, dans les versions antérieures de MySQL, la limite de longueur d'index pour les colonnes varchar était de 255 caractères en raison de l'hypothèse de 3 octets par Caractère UTF-8 et taille d'index maximale de 767 octets. Avec MySQL 8.0 et utf8mb4, cette limite a été assouplie pour les formats de lignes compressés et dynamiques, permettant des index plus longs sur les colonnes varchar.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal