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

Esiste un metodo ottimale per ordinare un indice composito MySQL?

Come regola generale, in un indice a più colonne, vuoi che le colonne con la cardinalità più alta, o in altre parole, il numero più alto di valori distinti, vengano prima nell'indice.

Per essere più precisi, vuoi prima la colonna con il minor numero di corrispondenze possibili ai tuoi criteri di ricerca in modo da poter restringere il più possibile il set di risultati, ma in generale è uguale alla cardinalità più alta.

Quindi, nel tuo esempio, vorrai che la colonna che avrà milioni di valori distinti sia nell'indice prima di quella con solo 6 valori distinti.

Supponendo che tu stia selezionando solo una riga tra milioni di valori, ti consente di eliminare più righe più velocemente.

Quando si considerano due colonne di cardinalità simile, inserire prima quella più piccola (INTEGER colonne prima di VARCHAR colonne) perché MySQL può confrontarli e scorrere su di essi più velocemente.

Un avvertimento è che se stai selezionando con intervalli (ad es. WHERE datecol > NOW() ), quindi vuoi le colonne dell'intervallo più a destra e le colonne con una singola costante (ad es. WHERE id = 1 ) A sinistra. Questo perché il tuo indice può essere utilizzato solo per la ricerca e l'ordine fino al valore del primo intervallo.