Heim  >  Artikel  >  Datenbank  >  So verwenden Sie die MySQL-Indexoptimierung

So verwenden Sie die MySQL-Indexoptimierung

ringa_lee
ringa_leeOriginal
2017-08-19 10:28:161558Durchsuche

Normalerweise handelt es sich bei den ersten Seiten jedes Buches um ein Inhaltsverzeichnis und auf den letzten Seiten um ein Stichwortverzeichnis.

Bei Datenbanken sind Systemtabellen (z. B. Sysobjects usw.) Verzeichnisse, und der Index des Felds entspricht dem Schlüsselwortindex am Ende des Buches.

In der Datenbank besteht der Unterschied zwischen dem Verzeichnis (Datenwörterbuch) und dem Index: Das Verzeichnis ist vertikal und der Index ist horizontal.

1. Faktoren, die die Indexfunktion beeinflussen

Diskriminierung (Abrufverhältnis)

Der Optimierer generiert einen Ausführungsplan basierend auf statistischen Informationen. Der Optimierer hat keine Startmöglichkeit und kann die Abfrage nur Schritt für Schritt durch einen vollständigen Tabellenscan ausführen. Daher muss der neu erstellte Index die Statistik erneut ausführen, andernfalls ist der Index ungültig.

Zum Beispiel gibt es eine Tabelle TABLE1, in der sich ein Feld COL1 mit drei Werten befindet: „1“, „2“ und „3“. Das Ergebnis der laufenden Statistik soll der Datenbank mitgeteilt werden Die Felder in den Daten in TABELLE1. Der Anteil verschiedener Werte von COL1. Die Darstellung ist wie folgt:

„1“ – 12 %;

„2“ – 66 %;

Angenommen, es gibt einen COL2-Feldwert und der Prozentsatz der Daten ist wie folgt:

„A“ – 50 %;

„B“ – 50 %.

Dann fragen Sie Anweisung 1 ab:

wählen Sie * aus TABELLE1 aus, wobei COL1 = „1“ und COL2 = „A“,

Der Datenbankoptimierer gibt der Auswahl von Feld COL1 Priorität Der Index wird zum Auffinden der Daten in der Tabelle verwendet, da der Ergebnissatz über den Index auf COL1 schnell in einem kleinen Bereich von 12 % lokalisiert werden kann. Im Gegenteil, für Abfrageanweisung 2:

wählen Sie * aus TABELLE1 aus, wobei COL1 = „2“ und COL2 = „A“,

die Datenbank gibt dem Index auf COL2 Priorität, weil für die Anweisung Der Index der Abfragebedingung COL2 von 2 weist eine bessere Unterscheidung auf.

Wie aus dem Obigen hervorgeht, gibt der Datenbankoptimierer in der Regel Indizes mit höherer Unterscheidungskraft Vorrang (bei Abfragebedingungen kann der ausgewählte Index für verschiedene Bedingungen unterschiedlich sein).

Die Daten in der Datenbank ändern sich, sodass die zu einem bestimmten Zeitpunkt gesammelten statistischen Informationen nach einiger Zeit veraltet sein oder sogar den Datenbankoptimierer irreführen können, was ebenfalls zu einer geringen Betriebsleistung führt. Zusätzlich zur Notwendigkeit, Statistiken auszuführen, wenn der Index zum ersten Mal erstellt wird, müssen Statistiken auch ausgeführt werden, wenn sich die Daten in der Tabelle ändern. Erfahrung: Wenn sich die Datenmenge in der Tabelle um 10 % ändert, müssen die Statistiken erneut ausgeführt werden.

2. Aggregationsgrad

Bereichsscan

Tabellengröße:

Kleiner Tisch

Mittlere und große Tabelle

Sehr große Tabelle

Geschäftstyp

OLTP und OLAP

Funktion und Index

Funktion, ähnliche Anweisung. . .

Substring(col_name,1, 3) vs. Substring(col_name, 3, 3)

wie 'QQQ% vs. wie '%QQQ'

Index-Overhead

Leistungstool

Zweischneidiges Schwert

Der Einfluss von Indizes auf Einfügevorgänge (Oracle)

Der Einfluss von Indizes auf Einfügevorgänge (MySQL)

Vergleichen Sie die Auswirkungen von Indizes und Enablern auf die Leistung

Indexzusammenfassung

Verwenden Sie Indizes, um einen effizienten Zugriff auf kritische Daten zu erreichen. Sie müssen jedoch wissen, dass jeder Index zusätzlichen Aufwand für die Datenbankaktualisierung mit sich bringt. Das bedeutet, dass ineffiziente Indizes zu einer Katastrophe für die Datenbank führen können.

Bei Datenbanken müssen wir uns auf das Lesen kritischer Daten konzentrieren und ihnen den effizientesten Zugriffspfad bieten. Die grundlegende Strategie hierfür besteht darin, Indizes zu erstellen. Während der Index einen effizienten Zugriff ermöglicht, bringt er auch zusätzlichen Systemaufwand mit sich. Der Overhead wird in Speicherplatz-Overhead und Prozessor-Overhead unterteilt. Als nächstes besprechen wir den Prozessor-Overhead. Immer wenn ein Datensatz in eine Tabelle eingefügt oder daraus gelöscht wird, müssen alle Indizes dieser Tabelle entsprechend angepasst werden. Diese Anpassung erfolgt auch immer dann, wenn eine Aktualisierung an einem indizierten Feld vorgenommen wird. Wenn das Einfügen von Daten in eine nicht indizierte Tabelle beispielsweise 100 Zeiteinheiten dauert, fügt jeder zusätzliche Index 100 bis 250 Zeiteinheiten hinzu. Interessanterweise entspricht der Aufwand für die Pflege des Index in etwa dem Aufwand für einen einfachen Trigger.

Wir stellen einige der beliebtesten Informationen an vorderster Front der Indizierung vor. Diese Informationen werden aufgeführt, weil ich denke, dass diese Informationen normalerweise eine Bezugnahme wert sind:

1 Wenn die Abfrage in angemessener Zeit endet, sollten Sie das Hinzufügen von Indizes vermeiden, da Indizes Aktualisierungsvorgänge verlangsamen und zusätzlichen Speicherplatz beanspruchen können. Manchmal gibt es große Indizes, die mehrere Abfragen abdecken.

1. Spalten mit größerer Kardinalität eignen sich sehr gut für die Indizierung.

3. Vermeiden Sie in Anbetracht des Verwaltungsaufwands die Verwendung von mehr als 5 Spalten im Index.

4. Platzieren Sie bei mehrspaltigen Indizes die am häufigsten referenzierten Spalten in der Abfrage am Anfang der Definition.

5. Vermeiden Sie das Hinzufügen von Indizes, die vorhandenen Indizes ähneln. Dies verursacht mehr Arbeit für den Optimierer und verlangsamt den Aktualisierungsvorgang. Stattdessen sollten wir den vorhandenen Index so ändern, dass er die zusätzlichen Spalten enthält. Angenommen, es gibt einen Index i1 für eine Tabelle (c1,c2). Sie bemerken, dass in der Abfrage „wherec2=?“ verwendet wird, also erstellen Sie einen Index i2 für (c2). Aber dieser ähnliche Index fügt nichts hinzu, er dient lediglich der Redundanz für i1 und verursacht nun zusätzlichen Overhead.

6. Wenn die Tabelle schreibgeschützt ist und viele Zeilen enthält, können Sie versuchen, einen Index zu definieren und die INCLUDE-Klausel in CREATE INDEX zu verwenden, um sicherzustellen, dass der Index alle in der Abfrage referenzierten Spalten einschließt (einschließlich der INCLUDE-Klausel). Die Spalte ist nicht Teil des Index, sondern wird nur als Teil der Indexseite gespeichert, um zusätzliche Datenabrufe zu vermeiden.

Für Data Warehouse (Datenbank des Abfragesystems) können mehr Indizes eingerichtet werden (das Verhältnis von Index zu Daten kann 1:1 betragen).

Bei der Entscheidung, ob Sie einen Index verwenden, können Sie sich auf das Abrufverhältnis konzentrieren. Das heißt, die Grundlage für die Beurteilung der Wirksamkeit des Index ist der Prozentsatz der abgerufenen Daten unter Verwendung des Schlüsselwerts als eindeutige Bedingung. Je niedriger der Prozentsatz, desto effizienter ist der Index. Diese Schlussfolgerung basiert auf einigen Annahmen, beispielsweise der relativen Leistung des Festplattenzugriffs.

Ob die physischen Standorte der Datensätze, die sich auf den Indexschlüsselwert beziehen, benachbart sind, ist ebenfalls wichtig, da Daten durch Blöcke manipuliert werden. Wenn nach der Indexerstellung die Datensätze, auf die der Indexschlüssel verweist, über die gesamte Tabelle verteilt sind, wird die Leistung des Index erheblich beeinträchtigt, selbst wenn diese Datensätze nur einen kleinen Teil der Tabelle ausmachen, da sie über die gesamte Tabelle verteilt sind Scheibe.

Es ist auch erwähnenswert, dass Funktionen und Typkonvertierungen zu Indexfehlern führen können.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die MySQL-Indexoptimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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