Mysql
 sql >> Database >  >> RDS >> Mysql

Dovremmo includere la colonna di ordinamento, la chiave primaria sull'indice composito (MySQL)

La risposta dipende dal motore che utilizzi:

  • MyISAM:aggiungere l'id all'indice può e probabilmente aiuterà
  • InnoDB - La chiave primaria fa già parte di ogni indice secondario, perché innodb memorizza le righe in BTREE ordinate per chiave primaria e l'indice deve puntare alla riga effettiva - in tal caso l'aggiunta è ridondante se è l'ultima nell'indice ( ma così facendo non lo aggiungerai due volte, quindi non dovrebbe peggiorare le cose). In alcuni casi potresti volerlo aggiungere come non ultimo, o hai più colonne primarie e aggiungi alcune colonne al tuo indice in un ordine diverso - non dovrebbero esserci problemi con esso, innodb aggiungerà le colonne rimanenti del primario a quell'indice, ma può utilizzare quelli aggiunti in precedenza senza duplicarli)

Quindi risponde:

  1. In InnoDB non è necessario, in MyISAM è utile nel caso in cui utilizzi effettivamente quell'ordinamento, se non lo usi, aggiungerlo rende solo quell'indice più grande.
  2. L'ordine delle colonne nella definizione della tabella e l'ordine nell'indice sono cose separate, quindi va bene
  3. Sì, quell'indice sembra davvero buono, ma puoi controllarti usando SPIEGARE , esiste la possibilità di prestazioni ancora migliori - "indice di copertura ", ma ciò ha un costo, quindi, a meno che la query non sia critica e con prestazioni insufficienti, è probabilmente eccessiva.