La cardinalité dans mysql est une estimation , et mysql base son estimation sur les statistiques d'utilisation de la table :
Vous pouvez en savoir plus sur les statistiques collectées pour les moteurs de table myisam et innodb dans la documentation de mysql et innodb et comment les configurer :
- Collection de statistiques d'index InnoDB et MyISAM
- Optimiseur de contrôle Estimation des statistiques
Toutes les statistiques sont stockées dans la table STATISTICS dans information_schema.
Les index, dont la cardinalité estimée est plus proche de leur cardinalité exacte (nombre de valeurs distinctes dans le champ) ont été créés il y a plus longtemps, donc mysql a collecté plus de statistiques pour eux et son estimation est plus précise. Si vous exécutez analyse table
sur cette table particulière, les cardinalités des index dupliqués seront probablement beaucoup plus proches les unes des autres qu'actuellement.
La grande question est, pourquoi avez-vous des index en double ?