Algemene vuistregel voor indexen is om er een te slaan op elk veld dat wordt gebruikt in een WHERE
of JOIN
clausule.
Dat gezegd hebbende, er zijn enkele optimalisaties die u kunt doen. Als je WEET dat een bepaalde combinatie van velden de enige is die ooit zal worden gebruikt in WHERE op een bepaalde tafel, dan kunt u een enkele sleutel voor meerdere velden maken voor alleen die velden, bijvoorbeeld
INDEX (field1, field2, field5)
vs.
INDEX (field1),
INDEX (field2),
INDEX (field5)
Een index met meerdere velden kan in veel gevallen efficiënter zijn, in plaats van meerdere indexen te moeten scannen. Het nadeel is dat de multi-field index alleen bruikbaar is als de betreffende velden ook daadwerkelijk in een WHERE-clausule worden gebruikt.
Met uw voorbeeldquery's, sinds element
en field_id
in alle drie de indexen staan, is het misschien beter om ze op te splitsen in hun eigen speciale index. Als dit veranderlijke velden zijn, is het beter om het hun eigen speciale index te houden. bijv. als u ooit field_id
moet wijzigen in bulk moet de DB 3 verschillende indexen bijwerken, v.s. slechts één speciale updaten.
Maar het komt allemaal neer op benchmarking - test uw specifieke opstelling met verschillende indexopstellingen en kijk welke het beste presteert. Vuistregels zijn handig, maar werken niet 100% van de tijd.