sql >> Database >  >> RDS >> Mysql

Wat moet worden geïndexeerd om de prestaties te verbeteren?

Over het algemeen kunnen de selectiefilters indexen gebruiken op user_id of activity_type_id of beide (in willekeurige volgorde).

De bestelbewerking kan mogelijk een filter gebruiken op created_at .

Het is waarschijnlijk dat voor deze zoekopdracht een samengestelde index op (user_id, activity_type_id) het beste resultaat zou geven, ervan uitgaande dat MySQL er daadwerkelijk gebruik van kan maken. Als dat niet lukt, is het waarschijnlijk beter om user_id . te indexeren dan activity_type_id omdat het waarschijnlijk een betere selectiviteit biedt. Een reden om te denken is dat er 4 subsecties van de index zouden zijn om te scannen als deze een index gebruikt op activity_type_id , vergeleken met slechts één subsectie om te scannen als het een index gebruikt op user_id alleen.

Als u probeert te vertrouwen op een index voor de sorteervolgorde, betekent dit waarschijnlijk een volledige tabelscan, dus het is minder waarschijnlijk dat dit voordelig is. Ik zou geen index maken op created_at om deze vraag te ondersteunen; er kunnen andere vragen zijn waar het nuttig zou zijn.



  1. Hoe te kiezen uit twee tabellen in MySQL, zelfs als niet alle rijen in de ene tabel correspondenten hebben in de andere?

  2. Volgorde-ID postgreSQL voor alle tabellen in bulk bijwerken

  3. Oracle zweeft versus nummer

  4. Gegevens kopiëren van de ene tabel naar de andere met een specifieke voorwaarde