La regola pratica generale per gli indici è inserirne uno su qualsiasi campo utilizzato in un WHERE
o JOIN
clausola.
Detto questo, ci sono alcune ottimizzazioni che puoi fare. Se SA che una determinata combinazione di campi è l'unica che verrà mai utilizzata in WHERE su una determinata tabella, quindi puoi creare una singola chiave multicampo solo su quei campi, ad es.
INDEX (field1, field2, field5)
vs.
INDEX (field1),
INDEX (field2),
INDEX (field5)
Un indice multicampo può essere più efficiente in molti casi, rispetto alla necessità di eseguire la scansione di più indici. Lo svantaggio è che l'indice multicampo è utilizzabile solo se i campi in questione sono effettivamente utilizzati in una clausola WHERE.
Con le tue query di esempio, da element
e field_id
sono in tutti e tre gli indici, è meglio dividerli nel loro indice dedicato. Se si tratta di campi modificabili, è meglio mantenerlo con un proprio indice dedicato. per esempio. se dovessi cambiare field_id
in blocco, il DB deve aggiornare 3 diversi indici, v.s. aggiornandone solo uno dedicato.
Ma tutto si riduce al benchmarking:testa la tua configurazione particolare con varie configurazioni di indici e vedi quale funziona meglio. Le regole pratiche sono utili, ma non funzionano il 100% delle volte.