Im Allgemeinen können die Auswahlfilter Indizes auf user_id
verwenden oder activity_type_id
oder beides (in beliebiger Reihenfolge).
Der Bestellvorgang kann möglicherweise einen Filter für created_at
verwenden .
Es ist wahrscheinlich, dass für diese Abfrage ein zusammengesetzter Index für (user_id, activity_type_id)
verwendet wird würde das beste Ergebnis liefern, vorausgesetzt, dass MySQL es tatsächlich nutzen kann. Andernfalls ist es wahrscheinlich besser, user_id
zu indizieren als activity_type_id
weil es wahrscheinlich eine bessere Selektivität liefert. Ein Grund für diese Annahme ist, dass 4 Unterabschnitte des Index gescannt werden müssten, wenn er einen Index auf activity_type_id
verwendet , verglichen mit nur einem Unterabschnitt, der gescannt werden muss, wenn er einen Index für user_id
verwendet allein.
Der Versuch, sich für die Sortierreihenfolge auf einen Index zu verlassen, bedeutet wahrscheinlich einen vollständigen Tabellenscan, daher ist es weniger wahrscheinlich, dass er von Vorteil ist. Ich würde keinen Index auf created_at
erstellen um diese Abfrage zu unterstützen; Es könnte andere Abfragen geben, bei denen dies von Vorteil wäre.