Die allgemeine Faustregel für Indizes ist, einen auf jedes Feld zu klatschen, das in einem WHERE
verwendet wird oder JOIN
Klausel.
Davon abgesehen gibt es einige Optimierungen, die Sie vornehmen können. Wenn Sie WISSEN dass eine bestimmte Kombination von Feldern die einzige ist, die jemals in WHERE für eine bestimmte Tabelle verwendet wird, dann können Sie einen einzigen Mehrfeldschlüssel nur für diese Felder erstellen, z. B.
INDEX (field1, field2, field5)
vs.
INDEX (field1),
INDEX (field2),
INDEX (field5)
Ein Index mit mehreren Feldern kann in vielen Fällen effizienter sein, als dass mehrere Indizes gescannt werden müssen. Der Nachteil ist, dass der Multi-Field-Index nur verwendet werden kann, wenn die betreffenden Felder tatsächlich in einer WHERE-Klausel verwendet werden.
Mit Ihren Beispielabfragen seit element
und field_id
in allen drei Indizes befinden, ist es vielleicht besser, sie in einen eigenen dedizierten Index aufzuteilen. Wenn es sich um veränderbare Felder handelt, ist es besser, einen eigenen dedizierten Index zu behalten. z.B. falls Sie jemals field_id
ändern müssen in großen Mengen muss die DB 3 verschiedene Indizes aktualisieren, vs. Aktualisieren von nur einem dedizierten.
Aber alles läuft auf Benchmarking hinaus – testen Sie Ihr spezielles Setup mit verschiedenen Index-Setups und sehen Sie, welches am besten abschneidet. Faustregeln sind praktisch, funktionieren aber nicht zu 100 %.