En général, les filtres de sélection peuvent utiliser des index sur user_id
ou activity_type_id
ou les deux (dans n'importe quel ordre).
L'opération de tri peut être en mesure d'utiliser un filtre sur created_at
.
Il est probable que pour cette requête, un index composite sur (user_id, activity_type_id)
donnerait le meilleur résultat, en supposant que MySQL puisse réellement l'utiliser. A défaut, il est probablement préférable d'indexer user_id
que activity_type_id
car il est susceptible d'offrir une meilleure sélectivité. Une des raisons de penser cela est qu'il y aurait 4 sous-sections de l'index à analyser s'il utilise un index sur activity_type_id
, par rapport à une seule sous-section à analyser si elle utilise un index sur user_id
seul.
Essayer de s'appuyer sur un index pour l'ordre de tri est susceptible de signifier une analyse complète de la table, il est donc moins susceptible d'être bénéfique. Je ne créerais pas d'index sur created_at
pour prendre en charge cette requête ; il pourrait y avoir d'autres requêtes où cela serait bénéfique.