Benötigen Sie nach der Datenbanknormalisierung noch eine Indizierung?


14

Müssen Sie die Tabelle nach einer guten Normalisierung noch indizieren? Wie wird sich das auf die Leistung auswirken? Beeinträchtigt es die Leistung nach einer guten Normalisierung in irgendeiner Weise?

Welche Spalten werden normalerweise indexiert, wenn Sie bereits den Primärschlüssel und den Fremdschlüssel haben?

Es scheint, als wäre es bereits effektiv, eine Datenbank zu normalisieren. Möglicherweise habe ich jedoch übersprungen, wie sich die Indizierung auf die Datenbank auswirkt. Ist dies nur wirksam, wenn Abfragen verwendet werden? Wie funktioniert das und wie verbessert man eine Datenbank?


5
Welche Spalten werden normalerweise indiziert, wenn Sie bereits den Primärschlüssel und den Fremdschlüssel haben? Termine. Namen. Alles, was Sie suchen oder sortieren müssen.
Carson63000

Der Index des Primärschlüssels zählt nicht?
CodesInChaos

Antworten:


34

Ja. Möglicherweise müssen Sie Ihren Indizes mehr Aufmerksamkeit schenken. Bei der Normalisierung geht es um eine optimale Speicherung . Dies steht häufig im Widerspruch zur Abrufgeschwindigkeit , da komplexere Abfragen mit komplizierten Verknüpfungen verwendet werden. Manchmal werden Datenbanken, für die schnelle Abrufgeschwindigkeiten erforderlich sind, de-normalisiert oder ihre Daten in etwas weniger normalisierten Strukturen angeordnet, um den Abruf zu vereinfachen.


21
Das Ziel der Normalisierung ist nicht die Speichereffizienz, sondern das Entfernen von Abhängigkeiten beim Einfügen, Aktualisieren und Löschen. Weitere Lektüre

4
Ich stimme @MichealT zu, dass es nicht um Effizienz geht. Logische Konsequenz war das, was ich aus dem Link herausbekam.
JeffO

Ich werde das umstrittene Wort "Effizienz" entfernen (obwohl ich denke, dass dies im Grunde den allgemeinen Zweck der Normalisierung zusammenfasst) und stattdessen nur das Wort "optimal" verwenden und dem Leser überlassen, was dies bedeutet. Der eigentliche Zweck der Normalisierung spielt keine Rolle, warum Indizes nach der Normalisierung einer Datenbank noch benötigt werden.
GrandmasterB

56

Ich denke, Sie haben falsch verstanden, was die Indizierung für die Datenbankleistung bewirkt.

Ein Index hilft der Datenbank beim Auffinden von Zeilen. Indizes sind spezialisierte Datenstrukturen, die im Austausch für zusätzlichen Speicherplatz und eine gewisse Leistung beim Einfügen und Aktualisieren dazu beitragen, dass das Datenbankmodul die passenden Zeilen findet.

Da sie zusätzlichen Speicherplatz beanspruchen und ein Minimum an Leistung kosten, um sie auf dem neuesten Stand zu halten, müssen Sie als Datenbankdesigner Indizes explizit erstellen, die Ihren Anwendungs- und Abfragemustern entsprechen.

Indizes sind orthogonal zur Datenbanknormalisierung.


4

Ja, nach der Normalisierung müssen Sie noch indizieren.

Die Tabellen, mit denen Sie arbeiten, profitieren genauso wie die Tabellen, die Sie vor der Normalisierung hatten. Eigentlich sind sie für sich genommen genau dasselbe: Tische.

Eine Sache, die Sie beachten müssen, sind Indizes, mit denen Sie sich schneller in Ihren Daten zurechtfinden. Das Normalisieren eines Datenbankentwurfs ist immer gut, aber manchmal müssen Sie die Implementierung aus Gründen der Leistung denormalisieren. Dies ist jedoch nur von Fall zu Fall möglich.


2

Ja.

Indizes sind eine Methode, um die Suche nach Daten zu beschleunigen. Bei einigen Abfragen handelt es sich um Primärschlüssel, die normalerweise implizit vom Datenbankmodul indiziert werden. Bei anderen Abfragen werden jedoch wahrscheinlich andere Spalten verwendet. Einige Abfragen suchen häufig nach Spalten, die nicht einmal eindeutig sind und daher nach einer Normalisierung nicht zu Primärschlüsseln werden können. Sie müssen wahrscheinlich solche Spalten indizieren.

Es gibt nur einen Weg zu wissen, welche Indizes erstellt werden müssen. Nehmen Sie alle Abfragen in der Anwendung finden repräsentatives Beispiel Parameter für sie und haben die Datenbank - Engine ihre Abfragepläne zeigen (alle Datenbank - Engines haben EXPLAIN, EXPLAIN QUERY PLANoder ähnlichen Befehl, es heißt unterschiedlich in verschiedenen Motoren) und testen , wie lange sie dauern. Erstellen Sie dann Indizes, die die langsamen Indizes beschleunigen. Und vergessen Sie nicht, Indizes, die Sie versucht haben, aber nicht dazu beigetragen haben, Ressourcenverschwendung zu vermeiden, erneut zu löschen.


1

Indizes werden im Allgemeinen in allen bis auf die kleinsten Tabellen benötigt. Ziemlich jeder Fremdschlüssel sollte indiziert werden und das Einrichten eines FK bedeutet nicht, dass Sie einen Index haben (zumindest in einigen Datenbanken, überprüfen Sie Ihre Datenbankdokumentation). Felder, die Sie häufig verknüpfen oder in denen Klauseln verwendet werden, sollten indiziert werden, wenn dies von Vorteil ist (Sie benötigen eine gewisse Variabilität der Daten, damit Boolesche Werte beispielsweise keinen Nutzen haben) und solche, in denen eine Indizierung möglich ist.

Jeder Index verlangsamt jedoch das Einfügen \ Aktualisieren \ Löschen, während die Auswahl beschleunigt wird. Wählen Sie Ihre Indizes daher sorgfältig aus.

Indizes sind für eine akzeptable Leistung in einer Datenbank von entscheidender Bedeutung.


0

Für eine dritte normale Form benötigen Sie auf jeden Fall Indizes für alle Primärschlüssel.

Ob Sie weitere Indizes benötigen, hängt davon ab, wie Ihre Datenbank verwendet wird. Wenn Sie beispielsweise regelmäßig nach Kunden in einer bestimmten Postleitzahl suchen, empfiehlt es sich möglicherweise, die Spalte zip_code in der Kundentabelle zu indizieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.