2010-02-03 6 views
24

Ich erstelle eine neue Datenbank und habe mich gefragt, ob es einen Nachteil beim Hinzufügen zahlreicher Indizes zu Tabellen gibt, von denen ich denke, dass sie eine benötigen.Gibt es einen Nachteil beim Hinzufügen zahlreicher Indizes zu Tabellen?

Wenn ich einen Index erstelle, aber am Ende nicht benutze, wird es irgendwelche Probleme verursachen?

+4

Duplizieren: http://stackoverflow.com/questions/141232/how-many-database-indexes-is-too-many, http://stackoverflow.com/questions/418744/what -ist-die-Kosten-der-Indizierung-mehrere-db-Spalten und viele andere. –

+0

Ich habe noch nie eine Frage mit so vielen doppelten Antworten in weniger als einer Minute gesehen. –

+0

Ich würde denken, dass dies mehr und mehr passieren wird, da SO immer beliebter wird, besonders bei den einfachen/allgemeinen Fragen wie dieser. –

Antwort

27

Indizes machen es schneller, Tabellen zu suchen, aber länger, um zu schreiben. Ungenutzte Indizes werden am Ende kommen und unnötige Verlangsamung verursachen.

+2

Und Indizes belegen auch Speicherplatz. –

16

Jeder Index:

  • nimmt einen Platz, auf der Festplatte und im Arbeitsspeicher
  • einige Zeit dauert, zu aktualisieren, jedes Mal, wenn Sie/Update Einfügen/Löschen einer Zeile

Was bedeutet, Sie sollten nur Indizes definieren, die für die Anforderungen Ihrer Anwendung nützlich sind: zu viele Indizes verlangsamen die Schreibvorgänge mehr als Sie durch die Lesevorgänge erzielen.

1

Ein Index bedeutet, dass INSERTs und UPDATEs etwas länger dauern. Wenn Sie zu viele Indizes haben, kann der Vorteil schnellerer Suchzeiten die zusätzliche INSERT- und UPDATE-Zeit nicht wert sein.

5

Ja. Sie sollten nur die notwendigen Indizes hinzufügen.

Ein Index benötigt zusätzlichen Platz, und beim Einfügen/Aktualisieren/Löschen von Datensätzen muss das DBMS diese Indizes ebenfalls aktualisieren. Dies bedeutet, dass das Aktualisieren/Hinzufügen/Löschen eines Datensatzes mehr Zeit in Anspruch nimmt, da das DBMS zusätzliche Verwaltungsaufgaben ausführen muss.

Hinzufügen zahlreicher Indizes zu Tabellen, die Ich denke, möglicherweise eine erfordern.

Sie sollten nur die Indizes hinzufügen, für die Sie sicher sind, dass sie notwendig sind. Um die Spalten zu bestimmen, wo Sie Indizes für setzen könnte, könnten Sie:

  • hinzufügen Indizes Spalten, die Fremdschlüssel sind
  • Indizes Spalten hinzufügen, die häufig verwendet werden, in denen Klauseln
  • Indizes in den Spalten, die in der Reihenfolge nach Klauseln verwendet werden.

Ein weiterer -und vielleicht besser- Ansatz ist SQL Profiler zu verwenden:

  • Verwendung von SQL Profiler verfolgen Ihre Anwendung/Datenbank für eine Weile
  • die Spur speichern Ergebnisse
  • Verwendung Die Ablaufverfolgung führt zu dem Indexoptimierungs-Assistenten, der Ihnen mitteilt, welche Indizes Sie erstellen sollten, welche Spalten in jedem Index enthalten sein sollten und welche Reihenfolge für den Index angezeigt wird.
1

Ja; Ein Index macht Auswahlen schneller, aber macht Inserts möglicherweise langsamer, da die Indizes für jede Einfügung aktualisiert werden müssen. Wenn Ihre Anwendung viel schreibt und nicht viel liest (z. B. ein Audit-Protokoll), sollten Sie eine zusätzliche Indizierung vermeiden.

4

Indizes führen zu einer Erhöhung der Datenbankgröße und der Zeit zum Einfügen/Aktualisieren/Löschen von Datensätzen. Versuche sie nicht hinzuzufügen, außer du weißt, dass du sie benutzen wirst.

1
  • Update und Insert Kosten mehr als Indizes müssen ebenfalls aktualisiert werden
  • mehr Platz gebraucht
1

Erstellen Sie keine zusätzlichen Indizes am Anfang. Warten Sie, bis Sie das System zumindest teilweise entwickelt haben, damit Sie eine Vorstellung von der Verwendung der Tabelle haben. Erstellen Sie Abfragepläne, um zu sehen, was abgefragt wird (und wie, und die Leistungskosten) und DANN fügen Sie nach Bedarf neue Indizes hinzu.

1

Nicht blind indizieren! Sehen Sie sich Ihre Daten an, um zu sehen, welche Spalten tatsächlich in SELECT-Prädikaten verwendet werden, und indexieren Sie diese.

Beachten Sie auch, dass Indizes Platz beanspruchen. Manchmal viel Platz. Ich habe Datenbanken gesehen, bei denen die Indizierungsdaten die reinen Daten bei weitem übertrafen.

1

Zusätzlicher Platz, zusätzliche Zeit zum Einfügen wie jeder gesagt hat.

Außerdem sollten Sie sich Ihrer Indizes und Ihres Designs sicher sein, da Indizes manchmal Abfragen verlangsamen können, wenn der Abfrageoptimierer den falschen Index auswählt. Dies ist ungewöhnlich, kann aber auftreten, wenn Sie einen Index für einen bestimmten Join optimieren und bewirken, dass ein anderer Join tatsächlich langsamer wird. Ich weiß nichts über SQL Server, aber Sie werden eine Menge Tricks finden, um den mySQL-Optimierer anzuweisen, Abfragen auf spezifische Weise zu erstellen, um dies zu umgehen.

DBA's bekommen eine Menge Geld, um über seltsame Gotcha's mit Indizes (unter anderem) zu wissen, also ja, es gibt Nachteile, viele Indizes hinzuzufügen, also sei vorsichtig. Beschränken Sie sich stark auf Ihren Abfrageprofiler und werfen Sie nicht einfach Blinds auf Probleme.

1

Sehen Sie sich die Spalten an, die in Ihren where-Klauseln verwendet werden, und schauen Sie sich die Spalten an, die in Joins verwendet werden. Im Allgemeinen die einfachste Faustregel. Fremdindizes, wie bereits erwähnt, verlangsamen Ihre DML-Anweisungen und werden im Allgemeinen nicht empfohlen. Im Idealfall beende ich das gesamte Modul und stelle während der Testphase sicher, dass Sie eine Lastanalyse für das Modul durchführen können. Überprüfen Sie dann, ob Sie Verzögerungen feststellen oder nicht, und analysieren Sie, wo die Verlangsamungen liegen, fügen Sie Indizes hinzu .

1

Ich denke, es wurde bereits beantwortet, aber im Grunde Index Indizes verlangsamen Inserts/Updates wie der Index aktualisiert wird, wenn ein neuer Datensatz eingefügt wird (oder eine vorhandene aktualisiert).

Platz ist auch eine Überlegung, sowohl Speicher als auch Festplatte.

Für Datenbanken, in denen eine große Anzahl von Transaktionen stattfindet, hat dies definitiv spürbare Auswirkungen auf die Leistung (daher umfasst das Leistungsoptimieren das Hinzufügen und Entfernen von Indizes zur Optimierung bestimmter Aktivitäten in der Datenbank).

Viel Glück

Verwandte Themen