Heim  >  Artikel  >  Datenbank  >  MySQL-Indexdesign

MySQL-Indexdesign

黄舟
黄舟Original
2017-02-06 10:24:301535Durchsuche

Ein Datenbankindex ist eine sortierte Datenstruktur in einem Datenbankverwaltungssystem, die beim schnellen Abfragen und Aktualisieren von Daten in Datenbanktabellen hilft. Die Indeximplementierung verwendet normalerweise den B-Baum und seine Variante B+-Baum.

Zusätzlich zu den Daten verwaltet das Datenbanksystem auch Datenstrukturen, die bestimmte Suchalgorithmen erfüllen. Diese Datenstrukturen verweisen auf die Daten in irgendeiner Weise, sodass erweiterte Suchalgorithmen auf diese Datenstrukturen implementiert werden können . Diese Datenstruktur ist ein Index.

Für das Setzen von Indizes auf Tabellen fallen Kosten an: Erstens wird der Speicherplatz der Datenbank erhöht, und zweitens nimmt das Einfügen und Ändern von Daten mehr Zeit in Anspruch (da sich auch der Index entsprechend ändert).

Die Abbildung zeigt eine mögliche Indizierungsmethode. Auf der linken Seite befindet sich eine Datentabelle mit insgesamt zwei Spalten und sieben Datensätzen. Die Spalte ganz links ist die physische Adresse des Datensatzes (beachten Sie, dass logisch benachbarte Datensätze nicht unbedingt physisch benachbart auf der Festplatte liegen). Um die Suche nach Col2 zu beschleunigen, können Sie wie rechts gezeigt einen binären Suchbaum verwalten, der den Indexschlüsselwert und einen Zeiger auf die physische Adresse des entsprechenden Datensatzes enthält Binäre Suche in O(log2n) Die entsprechenden Daten werden innerhalb der Komplexität erhalten.

Das Erstellen von Indizes kann die Systemleistung erheblich verbessern.

Erstens kann durch die Erstellung eines eindeutigen Index die Eindeutigkeit jeder Datenzeile in der Datenbanktabelle garantiert werden.

Zweitens kann es den Datenabruf erheblich beschleunigen, was auch der Hauptgrund für die Erstellung eines Index ist.

Drittens kann es die Verbindung zwischen Tabellen beschleunigen, was besonders wichtig ist, um die referenzielle Integrität von Daten zu erreichen.

Viertens kann durch die Verwendung von Gruppierungs- und Sortierklauseln für den Datenabruf auch die Zeit zum Gruppieren und Sortieren in Abfragen erheblich verkürzt werden.

5. Durch die Verwendung von Indizes können Sie Optimierungs-Hider während des Abfrageprozesses verwenden, um die Systemleistung zu verbessern.


Das Hinzufügen eines Index bietet so viele Vorteile. Warum nicht für jede Spalte in der Tabelle einen Index erstellen? Denn das Hinzufügen von Indizes hat auch viele Nachteile.


Erstens braucht es Zeit, Indizes zu erstellen und zu verwalten, und diese Zeit nimmt mit zunehmender Datenmenge zu.

Zweitens müssen Indizes zusätzlich zu dem von der Datentabelle belegten Datenspeicherplatz auch eine bestimmte Menge an physischem Speicherplatz belegen wird größer sein.

Drittens muss beim Hinzufügen, Löschen und Ändern von Daten in der Tabelle der Index dynamisch verwaltet werden, was die Datenpflegegeschwindigkeit verringert.

Indizes werden auf bestimmten Spalten in der Datenbanktabelle erstellt. Wenn Sie einen Index erstellen, sollten Sie berücksichtigen, welche Spalten indiziert werden können und welche nicht.

Im Allgemeinen sollten Indizes für diese Spalten erstellt werden:

1 Bei Spalten, die häufig durchsucht werden, kann die Suchgeschwindigkeit beschleunigt werden Primärschlüsselspalte, erzwingen die Eindeutigkeit der Spalte und die Anordnungsstruktur der Daten in der Organisationstabelle 3. Bei den Spalten, die häufig in Verbindungen verwendet werden, handelt es sich bei diesen Spalten hauptsächlich um Fremdschlüssel, die beschleunigen können ;

4. Erstellen Sie einen Index für Spalten, die häufig nach Bereich durchsucht werden müssen, da der Index sortiert ist und der angegebene Bereich kontinuierlich ist. Erstellen Sie einen Index für Spalten, die häufig sortiert werden müssen. Erstellen Sie einen Index, da der Index sortiert wurde, sodass die Abfrage die Sortierung des Index verwenden kann, um die Sortierabfragezeit zu beschleunigen.

6. Erstellen Sie einen Index für die Spalten, die häufig in der WHERE-Klausel verwendet werden, um die Beurteilung von Bedingungen zu beschleunigen.


Außerdem sollten für einige Spalten keine Indizes erstellt werden. Im Allgemeinen weisen diese Spalten, die nicht indiziert werden sollten, die folgenden Merkmale auf:

1. Für Spalten, die selten verwendet oder in Abfragen referenziert werden, sollten keine Indizes erstellt werden. Dies liegt daran, dass diese Spalten nur selten verwendet werden und eine Indizierung oder Nicht-Indizierung die Abfragegeschwindigkeit nicht verbessert. Im Gegenteil: Durch das Hinzufügen von Indizes wird die Wartungsgeschwindigkeit des Systems verringert und der Platzbedarf erhöht.

Zweitens sollten Indizes für Spalten mit wenigen Datenwerten nicht erhöht werden. Dies liegt daran, dass die Datenzeilen im Ergebnissatz einen großen Teil der Datenzeilen in der Tabelle ausmachen, da diese Spalten in den Abfrageergebnissen nur sehr wenige Werte enthalten, z. B. die Geschlechtsspalte der Personaltabelle. Die Daten, die in der Tabelle durchsucht werden müssen. Der Anteil der Zeilen ist riesig. Durch Erhöhen des Index wird der Abruf nicht wesentlich beschleunigt.

Drittens sollten keine Indizes zu Spalten hinzugefügt werden, die als Text-, Bild- und Bit-Datentypen definiert sind. Dies liegt daran, dass das Datenvolumen dieser Spalten entweder recht groß ist oder nur sehr wenige Werte aufweist.

Viertens: Wenn die Änderungsleistung weitaus größer ist als die Abrufleistung, sollte der Index nicht erstellt werden. Dies liegt daran, dass die Änderungsleistung und die Abrufleistung im Widerspruch zueinander stehen. Beim Hinzufügen von Indizes wird die Abrufleistung verbessert, die Änderungsleistung wird jedoch verringert. Beim Reduzieren von Indizes erhöht sich die Änderungsleistung und die Abrufleistung verringert sich. Daher sollten keine Indizes erstellt werden, wenn die Änderungsleistung viel höher ist als die Abrufleistung.


Entsprechend den Funktionen der Datenbank können im Datenbankdesigner drei Arten von Indizes erstellt werden: eindeutiger Index, Primärschlüsselindex und Clustered-Index.

Einzigartiger Index

Ein eindeutiger Index ist ein Index, bei dem keine zwei Zeilen denselben Indexwert haben dürfen. Die meisten Datenbanken lassen nicht zu, dass neu erstellte eindeutige Indizes mit der Tabelle gespeichert werden, wenn in den vorhandenen Daten doppelte Schlüsselwerte vorhanden sind. Die Datenbank verhindert möglicherweise auch das Hinzufügen neuer Daten, die zu doppelten Schlüsselwerten in der Tabelle führen würden. Wenn beispielsweise ein eindeutiger Index für den Nachnamen des Mitarbeiters (lname) in der Mitarbeitertabelle erstellt wird, können keine zwei Mitarbeiter denselben Nachnamen haben.

Primärschlüsselindex

Datenbanktabellen haben oft eine Spalte oder eine Kombination von Spalten, deren Werte jede Zeile in der Tabelle eindeutig identifizieren. Diese Spalte wird als Primärschlüssel der Tabelle bezeichnet. Durch das Definieren eines Primärschlüssels für eine Tabelle in einem Datenbankdiagramm wird automatisch ein Primärschlüsselindex erstellt, bei dem es sich um einen bestimmten Typ eines eindeutigen Index handelt. Der Index erfordert, dass jeder Wert im Primärschlüssel eindeutig ist. Es ermöglicht auch einen schnellen Zugriff auf Daten, wenn in Abfragen ein Primärschlüsselindex verwendet wird.

Clustered Index

In einem Clustered Index ist die physische Reihenfolge der Zeilen in der Tabelle dieselbe wie die logische (Index-)Reihenfolge der Schlüsselwerte. Eine Tabelle kann nur einen Clustered-Index enthalten. Wenn es sich bei einem Index nicht um einen Clustered-Index handelt, stimmt die physische Reihenfolge der Zeilen in der Tabelle nicht mit der logischen Reihenfolge der Schlüsselwerte überein. Clustered-Indizes bieten im Allgemeinen einen schnelleren Datenzugriff als Nicht-Clustered-Indizes.

Das Obige ist der Inhalt des MySQL-Indexdesigns. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Verwendung von MySQL-IndizesNächster Artikel:Verwendung von MySQL-Indizes