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.