web-dev-qa-db-de.com

Was sind die Nachteile von Indizes in Datenbanktabellen?

Gibt es einen Grund, warum ich nicht für jede meiner Datenbanktabellen einen Index erstellen sollte, um die Leistung zu steigern? Es scheint, dass es einen oder mehrere Gründe geben muss, ansonsten haben alle Tabellen standardmäßig einen.

Ich benutze MS SQL Server 2016.

5
Stpete111

Ein Index für einen Tisch ist keine große Sache. Sie haben automatisch einen Index für Spalten (oder Spaltenkombinationen), die Primärschlüssel sind oder als eindeutig deklariert sind.

Ein Index ist mit einem gewissen Aufwand verbunden. Der Index selbst belegt Speicherplatz auf Festplatte und Arbeitsspeicher (wenn verwendet). Wenn also Speicherplatz oder Speicherplatz Probleme bereiten, könnten zu viele Indizes ein Problem sein. Wenn Daten eingefügt/aktualisiert/gelöscht werden, müssen der Index sowie die ursprünglichen Daten beibehalten werden. Dadurch werden Aktualisierungen verlangsamt und die Tabellen (oder Teile der Tabellen) gesperrt, was die Abfrageverarbeitung beeinträchtigen kann.

Eine kleine Anzahl von Indizes für jede Tabelle ist sinnvoll. Diese sollten im Hinblick auf die typische Abfragebelastung entworfen werden. Wenn Sie jede Spalte in jeder Tabelle indizieren, werden Datenänderungen langsamer. Wenn Ihre Daten statisch sind, ist dies kein Problem. Es kann jedoch ein Problem sein, den gesamten Speicher mit Indizes zu verbrauchen.

14
Gordon Linoff

Als Minimum empfehle ich normalerweise mindestens einen Index pro Tabelle. Dieser würde automatisch für den Primärschlüssel Ihrer Tabellen erstellt, beispielsweise für eine IDENTITY-Spalte. Dann würden Fremdschlüssel normalerweise von einem Index profitieren, der manuell erstellt werden muss. Andere Spalten, die häufig in WHERE-Klauseln enthalten sind, sollten indiziert werden, insbesondere wenn sie viele eindeutige Werte enthalten. Der Vorteil der Indexierung von Spalten, wie z. B. Geschlecht (niedrige Kardinalität), wenn diese nur 2 Werte aufweist, ist umstritten. Die meisten Tabellen in meinen Datenbanken haben zwischen 1 und 4 Indizes, abhängig von den Daten in der Tabelle und davon, wie diese Daten abgerufen werden.

0
Tim Newton