Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL utilise-t-il des index existants pour créer de nouveaux index ?

Non, ce ne sera pas le cas.

Théoriquement, un index sur (site, product, value, id) a tout ce qu'il faut pour construire un index sur n'importe quel sous-ensemble de ces champs (y compris les index sur (product, value, id) et (value, id) ).

Cependant, la création d'un index à partir d'un index secondaire n'est pas prise en charge.

Tout d'abord, MySQL ne prend pas en charge l'analyse rapide de l'index complet (c'est-à-dire l'analyse d'un index dans l'ordre physique plutôt que logique), ce qui rend un chemin d'accès à l'index plus coûteux que la lecture de la table. Ce n'est pas un problème pour InnoDB , puisque la table elle-même est toujours groupée.

Deuxièmement, les ordres d'enregistrement dans ces index sont complètement différents, de sorte que les enregistrements doivent être triés de toute façon.

Cependant, le principal problème avec la vitesse de création d'index dans MySQL c'est qu'il génère la commande sur place (il suffit d'insérer les enregistrements un par un dans un B-Tree ) au lieu d'utiliser une source pré-triée. Comme @Daniel l'a mentionné, la création rapide d'index résout ce problème. Il est disponible en tant que plugin pour 5.1 et est préinstallé dans 5.5 .