Mi trovo di fronte a quanto segue e non sono sicuro di quale sia la prassi migliore.Due indici a colonna singola vs un indice a due colonne in MySQL?
Si consideri la seguente tabella (che otterrà grande):
id PK | giver_id FK | recipient_id FK | data
Sto utilizzando InnoDB e da quello che ho capito, crea indici automaticamente per le due colonne chiave esterna. Tuttavia, farò anche molte domande in cui dovrò abbinare una particolare combinazione di:
SELECT...WHERE giver_id = x AND recipient_id = t
.
Ogni combinazione sarà unica nella tabella.
C'è qualche vantaggio dall'aggiunta di un indice a due colonne su queste colonne, o i due indici individuali in teoria sarebbero sufficienti/gli stessi?
'MySQL può utilizzare solo un indice per SELECT', questo non è più vero, sarebbe bello se la tua risposta fosse aggiornata. – Davor
Ti dispiacerebbe spiegare perché l'indice di copertura non potrebbe essere utilizzato da 'recipient_id'? –
@IvoPereira Gli indici a colonne multiple in MySQL consentono di utilizzare tutti i campi dell'indice da sinistra a destra. Ad esempio se si ha un 'INDICE (col1, col2, col3, col4) 'allora l'indice verrà applicato per le ricerche con una clausola' WHERE' come 'col1 =' A'' o' col1 = 'A' AND col2 = 'B'' o 'col1 =' A 'AND col2 =' B 'AND col3 =' C 'AND col4 =' D'', ma questo indice particolare non sarà usato per qualcosa come 'WHERE col2 = 'B' 'o' WHERE col3 = 'C' AND col4 = 'D''perché i campi di ricerca non sono più presenti nella definizione dell'indice. Dovresti aggiungere altri indici per coprire quei campi. – Slicktrick