Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was sollte indiziert werden, um die Leistung zu verbessern?

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.