Comprendre la contrainte de longueur d'index MySQL
Lors de l'exécution des commandes fournies dans la question, une erreur est rencontrée car une clé d'index est également long. La longueur de clé maximale autorisée par MySQL est de 1 000 octets.
Causes de l'erreur
L'erreur se produit car la définition d'index dans la tentative de migration pour la gem 'acts_as_tagable_on' crée un index avec trois champs : taggable_id, taggable_type et context. La combinaison de ces champs dépasse la limite de 1000 octets.
Solution
Pour résoudre l'erreur, il est nécessaire de comprendre les points suivants :
-
Moteurs de stockage MySQL : MySQL utilise différents moteurs de stockage, chacun avec des limitations d'index différentes. MyISAM a une limite de 1 000 octets, tandis qu'InnoDB a une limite de 767 octets.
-
Impact du type de données : Le type de données des colonnes indexées affecte la taille de l'index. Pour les colonnes VARCHAR, la taille réelle de l'index sera trois fois la taille déclarée de la colonne. Par conséquent, un index sur une colonne VARCHAR(100) consommera 300 octets.
-
Index partiel : Pour surmonter la contrainte de longueur d'index, des index partiels peuvent être créés. Les index partiels limitent l'index à une partie du type de données.
Exemple :
Pour créer un index sur les 50 premiers caractères uniquement de votre_colonne ', la syntaxe suivante peut être utilisé :
CREATE INDEX example_idx ON YOUR_TABLE(your_column(50))
Copier après la connexion
Remarque :
- Les index partiels limiteront l'efficacité de l'index pour les recherches au-delà de la partie spécifiée.
- Pour le cas spécifique mentionné dans la question, il peut être conseillé d'envisager d'utiliser une base de données différente avec des limites de longueur d'index plus souples, telles que PostgreSQL.
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!