Das hängt davon ab, was Sie unter „gut“ und „schlecht“ verstehen. Grundsätzlich müssen Sie sich darüber im Klaren sein, dass jeder Index, den Sie hinzufügen, die Leistung bei jeder Suche nach dieser Spalte erhöht (das Hinzufügen eines Index zur Spalte „Nachname“ einer Personentabelle erhöht also die Leistung bei Abfragen, die „where lastname =“ enthalten). die Schreibleistung über die gesamte Tabelle verringern.
Der Grund dafür ist, dass beim Hinzufügen oder Aktualisieren einer Zeile sowohl die Tabelle selbst als auch jeder Index, dem diese Zeile angehört, hinzugefügt oder aktualisiert werden muss. Wenn Sie also fünf Indizes in einer Tabelle haben, muss jede Hinzufügung an sechs Stellen schreiben – fünf Indizes und die Tabelle – und eine Aktualisierung kann im schlimmsten Fall bis zu sechs Stellen berühren.
Die Indexerstellung ist dann ein Balanceakt zwischen Abfragegeschwindigkeit und Schreibgeschwindigkeit. In einigen Fällen, wie z. B. einem Datamart, der nur einmal pro Woche in einem Nachtjob mit Daten geladen wird, aber täglich tausende Male abgefragt wird, ist es sehr sinnvoll, mit Indizes zu überladen und die Abfragen so weit wie möglich zu beschleunigen. Im Fall von Online-Transaktionsverarbeitungssystemen sollten Sie jedoch versuchen, ein Gleichgewicht zwischen ihnen zu finden.
Kurz gesagt, fügen Sie Indizes zu Spalten hinzu, die häufig in ausgewählten Abfragen verwendet werden, aber versuchen Sie, nicht zu viele hinzuzufügen, und fügen Sie daher zuerst die am häufigsten verwendeten Spalten hinzu.
Danach ist es eine Frage von Lasttests, um zu sehen, wie sich die Leistung unter Produktionsbedingungen verhält, und einer Menge Optimierungen, um eine akzeptable Balance zu finden.