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

In MySQL, come creare un indice per velocizzare questa query?

Per dare davvero una risposta sarebbe utile vedere se hai già degli indici esistenti, ma...

Tutto ciò presuppone che la tabella 't' esista e che tu debba aggiungere un indice e che al momento hai solo un singolo indice sulla tua chiave primaria o nessun indice.

Un indice di copertura per la query fornirà le migliori prestazioni per le tue esigenze, ma con qualsiasi indice sacrificherai una certa velocità di inserimento. Quanto conta quel sacrificio dipende dal profilo della tua applicazione. Se leggi principalmente dal tavolo, non importerà molto. Se hai solo pochi indici, anche un carico di scrittura moderato non avrà importanza. Potrebbe anche entrare in gioco uno spazio di archiviazione limitato per i tuoi tavoli... Devi fare la valutazione finale del compromesso e se è evidente. La cosa buona è che è un successo abbastanza costante. In genere, l'aggiunta di un indice non rallenta gli inserti in modo esponenziale, ma in modo lineare.

Indipendentemente da ciò, ecco le tue opzioni per le migliori prestazioni selezionate:

  1. Se c3 è la tua chiave primaria per la tabella t, non puoi fare niente di meglio nella query per renderla più veloce con un indice.
  2. Supponendo che c1 sia la tua chiave primaria t:

    ALTER TABLE t ADD INDEX covering_index (c3,c2);  
    
  3. Se c1 non è il tuo pk (e nemmeno c2), usa questo:

    ALTER TABLE t ADD INDEX covering_index (c3,c2,c1);  
    
  4. Se c2 è il tuo PK usa questo:

    ALTER TABLE t ADD INDEX covering_index (c3,c1);  
    
  5. Se lo spazio su disco o la velocità di inserimento sono un problema, puoi scegliere di eseguire un indice di punti. Sacrificherai alcune prestazioni, ma se sei inserito pesante potrebbe essere l'opzione giusta:

    ALTER TABLE t ADD INDEX a_point_index (c3);