2015-04-24 4 views
8

Ich bin ziemlich neu in der Datenbank-Programmierung und ich frage mich, was die negativen Auswirkungen von Indizes sind? Soweit ich es verstanden habe, beschleunigen Indizes Operationen, die die Datenbank nach einem bestimmten Wert durchsuchen müssen (zum Beispiel ein SELECT).Warum und wo zu verwenden INDEXen - Vor- und Nachteile

Betrachten Sie dieses Beispiel:

Für den Tisch Example mit einem Index auf Spalte user_name, die Operation:

SELECT TestField FROM Example WHERE user_name=XXXX 

schneller als Ergebnis des Index sein.

Meine Frage ist: Was sind Nachteile der Verwendung von Indizes? Wenn ein Index uns nur Profis gibt (Performancegewinn), warum werden sie nicht als Standard gesetzt?

+0

Verwandte Frage, möglicherweise duplizieren: http://StackOverflow.com/Questions/5696897/what-are-the-biggest-benefits-of-using-Indexes-in-mysql – TZHX

+0

Indizes sind nicht frei. Sie müssen erstellt und aktualisiert werden, sodass Einfügungen und Aktualisierungen langsamer sind. – Marvin

+0

versuchen Sie, die gleiche Frage hier zu stellen: https://dba.stackexchange.com/help/on-topic – chharvey

Antwort

12

Nun werden Sie wahrscheinlich Bücher über Indizes füllen können in kurzen, aber hier sind ein paar Dinge zu denken, bei der Erstellung eines Index:

Während es (meistens) beschleunigt eine Auswahl, es langsam s down fügt ein, aktualisiert und löscht, weil das Datenbankmodul nicht nur die Daten, sondern auch den Index schreiben muss. Ein Index benötigt Speicherplatz auf der Festplatte (und viel wichtiger) im RAM. Ein Index, der nicht im RAM gehalten werden kann, ist ziemlich nutzlos. Ein Index für eine Spalte mit nur ein paar verschiedenen Werten beschleunigt selects nicht, weil er nicht viele Zeilen sortieren kann (zum Beispiel eine Spalte "gender", die normalerweise nur zwei verschiedene Werte hat - männlich, weiblich).

Wenn Sie MySQL zum Beispiel verwenden, können Sie überprüfen, ob der enginge einen Index verwendet, indem „erklären“, bevor die Auswahl Zugabe - für Ihr obiges Beispiel EXPLAIN SELECT TestField FROM Example WHERE username=XXXX

-2

Hängt davon ab, wie Sie Ihre Indizes haben, aber sie sind eindeutige Kennungen für jede Tabellenzeile im wesentlichen in der Regel um einen Wert zum Beispiel erhöht:

mytable{ 
index | name | m/f | age 
    1 | bob | male | 22 | 
    2 | joe b | male | 27 | 
    3 | sam | female | 42 | 
    4 | bef | female | 21 | 
} 

Sehen Sie, wie wir die Zahl 3 für „sam“ überprüfen statt gehen durch jede Tabelle jede Zeile und jede Spalte ..

+2

Bitte klären, wie dies die Frage beantwortet? – Marvin

+0

Ich gab eine schnelle Reihe von grundlegenden Grundlagen, überprüfen Stefan P Antwort :) – Careen

7

Was sind Indizes für, was sie sind in der Datenbank?

Ohne Index auf Spalte user_name System müsste die gesamte Tabelle Example Zeile für Zeile durchsuchen, um alle übereinstimmenden Einträge zu finden. Wenn die Datenverteilung in einer bestimmten Tabelle darauf hinweist, dass es nur wenige Zeilen gibt, ist dies eindeutig ein ineffizienter Weg, diese Zeilen zu erhalten.

Wenn Sie jedoch Indizes verwenden, leiten Sie die Suchleistung in eine andere Baumstruktur um, die schnellere Suchvorgänge und eine sehr geringe Tiefe bietet.

Bitte beachten Sie, dass Indizes reine Redundanz sind. Datenbank-Index ist wie ein Telefonbuch oder ein anderer Index in einem Buch, das Sie bereit sind zu lesen (wahrscheinlich ein Teil von, um schnell zu finden, was Sie suchen).

Wenn Sie an einem Kapitel eines Buches interessiert sind, können Sie den Index relativ schnell finden, so dass Sie nicht viele Seiten durchblättern müssen, um es zu bekommen.

Warum werden keine Indizes standardmäßig erstellt?

Index ist eine Datenstruktur, die neben einer Tabelle erstellt wird und sich bei jeder Änderung einer Tabelle selbst verwaltet. Die Tatsache seiner Existenz impliziert die Nutzung des Datenspeichers.

Wenn Sie jede Spalte in einer großen Tabelle indizieren würden, würde der Speicher, der zum Beibehalten von Indizes benötigt wird, die Größe der Tabelle bei weitem überschreiten.

Die Selbsterhaltung einer Indexstruktur bedeutet auch, dass bei einer UPDATE, INSERT, DELETE der Index aktualisiert werden muss und dass Zeit kostet.

Es gibt Situationen, in denen Sie den größten Teil der Tabelle oder die gesamte Tabelle abrufen müssen. In diesem Fall wäre der Sequenz-Scan der gesamten Tabelle effizienter als die Traversierungs- und Blattknoten-Kette.

0

Der Hauptgrund, warum wir keinen Index als Standard verwenden, ist das Wartungsproblem. , d. H. Wenn wir diese bestimmte Spalte, die in einer Tabelle indiziert ist, im Allgemeinen aktualisieren (einfügen, löschen oder aktualisieren), muss der Index dynamisch aktualisiert werden, was ein zeitaufwendiger Prozess ist. Außerdem wird es zu einem Overhead, diesen Index beizubehalten.

Verwandte Themen