Generel tommelfingerregel for indekser er at smække en på ethvert felt, der bruges i en WHERE
eller JOIN
klausul.
Når det er sagt, er der nogle optimeringer, du kan foretage. Hvis du VED at en bestemt kombination af felter er den eneste, der nogensinde vil blive brugt i WHERE på en bestemt tabel, så kan du oprette en enkelt multifeltnøgle på netop disse felter, f.eks.
INDEX (field1, field2, field5)
v.s.
INDEX (field1),
INDEX (field2),
INDEX (field5)
Et multi-felt indeks kan være mere effektivt i mange tilfælde, i forhold til at skulle scanne flere indekser. Ulempen er, at indekset med flere felter kun er brugbart, hvis de pågældende felter faktisk bruges i en WHERE-klausul.
Med dine eksempelforespørgsler, da element
og field_id
er i alle tre indekser, er det måske bedre at dele dem op i deres eget dedikerede indeks. Hvis disse er udskiftelige felter, så er det bedre at beholde det deres eget dedikerede indeks. for eksempel. hvis du nogensinde skal ændre field_id
i bulk skal DB'en opdatere 3 forskellige indekser, v.s. opdaterer kun én dedikeret.
Men det hele handler om benchmarking – test netop dit setup med forskellige indeksopsætninger og se, hvilken der klarer sig bedst. Tommelfingerregler er praktiske, men virker ikke 100 % af tiden.