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

Devrions-nous inclure la colonne de tri, la clé primaire sur l'index composite (MySQL)

La réponse dépend du moteur que vous utilisez :

  • MyISAM - l'ajout d'un identifiant à l'index peut et sera probablement utile
  • InnoDB - La clé primaire fait déjà partie de chaque index secondaire, car innodb stocke les lignes dans BTREE triées par clé primaire et l'index a besoin de primaire pour pointer vers la ligne réelle - dans ce cas, l'ajouter est redondant s'il est le dernier dans l'index ( mais cela ne l'ajoutera pas deux fois, donc cela ne devrait pas aggraver les choses). Dans certains cas, vous voudrez peut-être l'ajouter comme non-dernier, ou vous avez plusieurs colonnes primaires et vous ajoutez des colonnes à votre index dans un ordre différent - cela ne devrait pas poser de problème, innodb ajoutera les colonnes restantes de primaire à cet index, mais peut utiliser ceux ajoutés avant sans les dupliquer)

Alors répond :

  1. Dans InnoDB, c'est inutile, dans MyISAM, c'est bien si vous utilisez réellement ce tri, si vous ne l'utilisez pas, l'ajouter ne fait que rendre cet index plus grand.
  2. L'ordre des colonnes dans la définition de table et l'ordre dans l'index sont des choses distinctes, donc c'est OK
  3. Oui, cet index semble vraiment bon - mais vous pouvez vérifier vous-même en utilisant EXPLIQUER , il est possible d'obtenir des performances encore meilleures - "index de couverture ", mais cela a un coût, donc à moins que la requête ne soit critique et peu performante, elle est probablement exagérée.