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

ordinamento efficiente delle chiavi in ​​un indice composto MySQL (associazioni WRT Rails Polymorphic e STI)

Dalla mia ricerca (ma non sono un DBA esperto) ho imparato che ci sono due cose da considerare quando si decide l'ordine di un indice a chiave composta.

In primo luogo, per quanto riguarda la cardinalità delle colonne, gli indici generalmente sono migliori nella ricerca di colonne con cardinalità elevata. Quindi sarei propenso a posizionare prima nell'indice la colonna con la cardinalità più alta. Per riferimento, c'è un articolo intitolato Ottimizzazione delle query MySQL che dice:

Nel tuo caso, il _id le colonne si adatterebbero chiaramente meglio a quella definizione, quindi sono un candidato migliore per essere un prefisso della chiave.

Un'altra cosa da considerare sarebbe la riutilizzabilità di questi indici. La maggior parte (se non tutti) i sistemi di database consentono di riutilizzare un prefisso di una chiave composta. Ad esempio, una chiave composta su (owner_id, owner_type) potrebbe essere utilizzato anche da query su owner_id ma non su owner_type .

Quindi, da quello che hai spiegato nella tua domanda, potresti stare meglio con due indici:un indice di chiave composto su (owner_id, owner_type) e un altro su (owner_type) .

Infine, tutto si riduce al tuo set di dati e alle tue query. Prova più scenari, benchmark utilizzando diversi ordini di chiavi composte per vedere qual è la soluzione più ottimale. Inoltre, non dimenticare che gli indici comportano una penalità di scrittura sulle tue tabelle.

Aggiorna :C'è anche un'altra domanda SO piuttosto popolare sull'indice della chiave composta lì:

Quando dovrei usare un indice composito?