Maison > base de données > tutoriel mysql > Pourquoi mon index MySQL VARCHAR(512) n'est-il pas utilisé ?

Pourquoi mon index MySQL VARCHAR(512) n'est-il pas utilisé ?

Susan Sarandon
Libérer: 2024-11-25 03:56:12
original
428 Les gens l'ont consulté

Why Isn't My MySQL VARCHAR(512) Index Being Used?

Longueur de l'index MySQL VARCHAR

Les tables MySQL ont une longueur d'index maximale de 767 octets. Ceci est par colonne, donc un index composite ne peut pas dépasser 767 octets au total. Cependant, il existe quelques exceptions à cette règle :

  • Avec l'option de configuration innodb_large_prefix activée, la limite de longueur d'index est augmentée à 3072 octets pour les tables InnoDB utilisant les formats de ligne DYNAMIQUE ou COMPRESSÉ.
  • Pour les jeux de caractères utf8, MySQL suppose 3 octets par caractère. Le nombre maximum de caractères pouvant être indexés est donc de 255 (767/3).

Dans votre cas précis :

  • Vos produits la table a une colonne de nom de type varchar(512).
  • Vous avez créé un index sur cette colonne avec les produits ALTER TABLE ADD INDEX (name(512)).

L'index que vous avez créé n'est pas utilisé car il dépasse la longueur maximale de l'index de 767 octets. En effet, MySQL suppose 3 octets par caractère UTF-8 et 512 caractères * 3 octets/caractère = 1 536 octets.

Pour résoudre ce problème, vous pouvez :

  • Réduisez la longueur de l'index à 255 caractères ou less.

    ALTER TABLE products ADD INDEX (name(255));
    Copier après la connexion
  • Activez l'option de configuration innodb_large_prefix et utilisez le format de ligne DYNAMIQUE ou COMPRESSÉ.

    SET innodb_large_prefix = ON;
    
    ALTER TABLE products ROW_FORMAT=COMPRESSED;
    Copier après la connexion

Supplémentaire Remarques :

  • Si vous stockez principalement des caractères ASCII (1 octet par caractère), vous pouvez spécifier un index allant jusqu'à 767 octets.
  • Il est possible de stocker des caractères de 4 octets en utilisant le jeu de caractères utf8mb4. Cependant, cela réduira encore davantage le nombre maximum de caractères pouvant être indexés.

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