Um wirklich eine Antwort zu geben, wäre es nützlich zu sehen, ob Sie bereits Indizes haben, aber...
All dies setzt voraus, dass die Tabelle „t“ existiert und Sie einen Index hinzufügen müssen und Sie derzeit nur einen einzigen Index für Ihren Primärschlüssel oder überhaupt keine Indizes haben.
Ein abdeckender Index für die Abfrage bietet die beste Leistung für Ihre Anforderungen, aber bei jedem Index opfern Sie etwas Einfügungsgeschwindigkeit. Wie viel dieses Opfer ausmacht, hängt vom Profil Ihrer Anwendung ab. Wenn Sie hauptsächlich aus der Tabelle lesen, spielt es keine Rolle. Wenn Sie nur wenige Indizes haben, spielt selbst eine moderate Schreiblast keine Rolle. Begrenzter Speicherplatz für Ihre Tische kann ebenfalls ins Spiel kommen ... Sie müssen die endgültige Bewertung des Kompromisses vornehmen und ob er erkennbar ist. Das Gute ist, dass es ein ziemlich konstanter Hit ist. Normalerweise verlangsamt das Hinzufügen eines Index Ihre Einfügungen nicht exponentiell, sondern nur linear.
Ungeachtet dessen sind hier Ihre Optionen für die beste ausgewählte Leistung:
- Wenn c3 Ihr Primärschlüssel für Tabelle t ist, können Sie in der Abfrage nichts besser machen, um sie mit einem Index schneller zu machen.
-
Angenommen, c1 ist Ihr Primärschlüssel t:
ALTER TABLE t ADD INDEX covering_index (c3,c2);
-
Wenn c1 nicht Ihr Paket ist (und c2 auch nicht), verwenden Sie Folgendes:
ALTER TABLE t ADD INDEX covering_index (c3,c2,c1);
-
Wenn c2 Ihr PK ist, verwenden Sie Folgendes:
ALTER TABLE t ADD INDEX covering_index (c3,c1);
-
Wenn der Speicherplatz auf der Festplatte oder die Einfügegeschwindigkeit ein Problem darstellen, können Sie einen Punktindex erstellen. Sie werden etwas Leistung opfern, aber wenn Sie schwer einfügen, ist dies möglicherweise die richtige Option:
ALTER TABLE t ADD INDEX a_point_index (c3);