sql >> Database >  >> RDS >> Mysql

MySQL - index met meerdere kolommen

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.




  1. PostgreSQL-kolommen wijzigen die in weergaven worden gebruikt

  2. SQL Server-teksttype versus varchar-gegevenstype

  3. Wat u moet weten over databasegestuurde websites

  4. Leesbare secundairen met een beperkt budget