Warum und wo INDEXEN zu verwenden sind - Vor- und Nachteile

8

Ich bin ziemlich neu in der Datenbankprogrammierung 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).

Betrachten Sie dieses Beispiel:

Für die Tabelle Example , mit einem Index für die Spalte user_name , die Operation:

%Vor%

Wird aufgrund des Indexes schneller sein.

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

    
Jhon Zunda 24.04.2015, 08:40
quelle

4 Antworten

12

Nun, Sie können wahrscheinlich Bücher über Indizes füllen, aber kurz hier ein paar Dinge, über die Sie nachdenken sollten, wenn Sie einen Index erstellen:

Während (meistens) eine Auswahl beschleunigt wird, werden Einfügungen, Aktualisierungen und Löschvorgänge verlangsamt, da die Datenbank-Engine nicht nur die Daten schreiben muss, sondern auch den Index. 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 Engine einen Index verwendet, indem Sie vor dem Auswählen "explain" hinzufügen - für Ihr Beispiel oben EXPLAIN SELECT TestField FROM Example WHERE username=XXXX

    
Stefan P 24.04.2015, 08:55
quelle
7

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

Ohne Index für die Spalte user_name system müsste die gesamte Tabelle Example Zeile für Zeile durchsucht werden, 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 sich für ein Kapitel eines Buches interessieren, können Sie es 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 Tabellenänderung 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 der Indizes benötigt wird, bei weitem die Größe der Tabelle überschreiten.

Selbstwartung einer Indexstruktur bedeutet auch, dass immer wenn ein UPDATE, INSERT, DELETE auftritt, 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 Tree Traversal- und Leaf-Knoten-Kette.

    
Kamil G. 24.04.2015 08:58
quelle
0

Der Hauptgrund, warum wir keinen Index als Standard verwenden, ist das Wartungsproblem. 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.

    
Vinjamuri Satya Krishna 14.03.2017 21:03
quelle
-2

Hängt davon ab, wie Sie Ihre Indizes haben, aber im Wesentlichen sind sie eindeutige Bezeichner für jede Tabellenzeile, die normalerweise um einen Wert erhöht wird, zum Beispiel:

%Vor%

Sehen Sie, wie wir die Zahl 3 für "sam" überprüfen können, anstatt jede Tabelle in jeder Zeile und jeder Spalte zu durchlaufen.

    
Careen 24.04.2015 08:47
quelle

Tags und Links