Dieser Artikel veranschaulicht anhand von Beispielen die Prinzipien und die Verwendung der Indeximplementierung zur MySQL-Datenbankoptimierung. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: IndexWas ist ein IndexIndizes werden verwendet, um Datensätze mit bestimmten Werten schnell zu finden. Alle MySQL-Indizes werden in Form von B-Bäumen gespeichert. Wenn kein Index vorhanden ist, muss MySQL beim Ausführen einer Abfrage alle Datensätze in der gesamten Tabelle beginnend mit dem ersten Datensatz scannen, bis es einen Datensatz findet, der die Anforderungen erfüllt. Je mehr Datensätze die Tabelle enthält, desto aufwändiger ist dieser Vorgang. Wenn für die als Suchbedingung verwendete Spalte ein Index erstellt wurde, kann MySQL den Speicherort des Zieldatensatzes schnell ermitteln, ohne irgendwelche Datensätze zu scannen. Wenn die Tabelle 1.000 Datensätze enthält, ist die Suche nach einem Datensatz mithilfe eines Indexes mindestens 100-mal schneller als das sequenzielle Durchsuchen der Datensätze. IndexklassifizierungPrimärschlüsselindex Ein Primärschlüssel ist ein eindeutiger Index, er muss jedoch als „PRIMARY KEY“ angegeben werden. Wenn Sie schon einmal AUTO_INCREMENT-Spalten verwendet haben, sind Sie möglicherweise bereits mit Konzepten wie Primärschlüsseln vertraut. Der Primärschlüssel wird üblicherweise beim Erstellen einer Tabelle angegeben, beispielsweise „CREATE TABLE tablename ([…], PRIMARY KEY (column list));“. Wir können jedoch auch einen Primärschlüssel hinzufügen, indem wir die Tabelle ändern, z. B. mit „ALTER TABLE tablename ADD PRIMARY KEY (column list);“. Jede Tabelle kann nur einen Primärschlüssel haben. Erstellen eines Primärschlüsselindexes Ein Primärschlüssel ist ein eindeutiger Index, er muss jedoch als „PRIMARY KEY“ angegeben werden. Wenn Sie schon einmal AUTO_INCREMENT-Spalten verwendet haben, sind Sie möglicherweise bereits mit Konzepten wie Primärschlüsseln vertraut. Der Primärschlüssel wird üblicherweise beim Erstellen einer Tabelle angegeben, beispielsweise „CREATE TABLE tablename ([…], PRIMARY KEY (column list));“. Wir können jedoch auch einen Primärschlüssel hinzufügen, indem wir die Tabelle ändern, z. B. mit „ALTER TABLE tablename ADD PRIMARY KEY (column list);“. Jede Tabelle kann nur einen Primärschlüssel haben. Wenn eine Tabelle eine Spalte als Primärschlüssel festlegt, ist die Spalte der Primärschlüsselindex. Tabelle aaa erstellen (id int vorzeichenloser Primärschlüssel auto_increment, Name varchar(32) nicht null Standard ''); Dies ist die ID-Spalte, die den Primärschlüsselindex darstellt. Erstellen Sie die Tabelle bbb (ID int, Name varchar(32), nicht null, Standard ''); Wenn Sie beim Erstellen der Tabelle keinen Primärschlüsselindex angegeben haben, können Sie ihn auch nach dem Erstellen der Tabelle hinzufügen. Befehl: Beispiel: Tabelle ändern, Tabellenname, Primärschlüssel hinzufügen (Spaltenname); Löschen des Primärschlüsselindexes Tabellenartikel ändern, Primärschlüssel löschen; Abfrageindex desc Tabellenname; Indexname kann nicht angezeigt werden. Index aus Tabellenname anzeigen. Schlüssel aus Tabellenname anzeigen. Volltextindex Tabellenstruktur erstellen CREATE TABLE-Artikel ( id INT UNSIGNED AUTO_INCREMENT NICHT NULL PRIMARY KEY, Titel VARCHAR(200), Textkörper, VOLLTEXT (Titel, Text) )engine=myisam-Zeichensatz utf8; INSERT INTO Artikel (Titel, Text) Werte ('MySQL-Tutorial', 'DBMS steht für DataBase ...'), ('So verwenden Sie MySQL richtig','Nachdem Sie durch ... gegangen sind'), ('MySQL optimieren','In diesem Tutorial zeigen wir ...'), ('1001 MySQL-Tricks','1. Führen Sie mysqld niemals als Root aus. 2. ...'), ('MySQL vs. YourSQL','Im folgenden Datenbankvergleich ...'), ('MySQL-Sicherheit', 'Bei richtiger Konfiguration funktioniert MySQL ...'); Falsche Verwendung: Richtige Verwendung: veranschaulichen: 1. In MySQL ist der Volltextindex nur für MyISAM gültig Eindeutiger Index Dieser Indextyp entspricht grundsätzlich dem bisherigen „normalen Index“, allerdings mit einem Unterschied: Alle Werte in der Indexspalte dürfen nur einmal vorkommen, müssen also eindeutig sein. Eindeutige Indizes können auf folgende Arten erstellt werden: Erstellen Sie einen Index, zum Beispiel CREATE UNIQUE INDEX <Indexname> ON Tabellenname (Spaltenliste); Ändern Sie die Tabelle, zum Beispiel mit ALTER TABLE tablename ADD UNIQUE [Indexname] (Spaltenliste); Geben Sie beim Erstellen einer Tabelle den Index an, zum Beispiel CREATE TABLE tablename ([…], UNIQUE [Indexname] (Spaltenliste)); Tabellenstruktur erstellen Tabelle erstellen ddd(ID int Primärschlüssel auto_increment, Name varchar(32) eindeutig); Beachten Ein eindeutiges Feld kann NULL sein und mehrere NULL-Werte enthalten, wenn es sich jedoch um einen bestimmten Inhalt handelt, kann dieser nicht wiederholt werden. Aber es darf keine Wiederholung von leeren Zeichenfolgen geben.'' Normaler Index Die einzige Aufgabe eines normalen Indexes (ein Index, der durch das Schlüsselwort KEY oder INDEX definiert ist) besteht darin, den Zugriff auf Daten zu beschleunigen. Daher sollten Sie Indizes nur für die Spalten erstellen, die am häufigsten in Abfragebedingungen (WHEREcolumn=) oder Sortierbedingungen (ORDERBYcolumn) vorkommen. Wählen Sie zum Erstellen eines Index möglichst eine Spalte mit den übersichtlichsten und kompaktesten Daten (z. B. eine Ganzzahlspalte). Tabelle ccc erstellen( ID int ohne Vorzeichen, Name varchar(32) ) Erstellen Sie einen Index mit Indexnamen für die Tabelle (Spalte 1, Spaltenname 2). So funktioniert der Index Ein Datenbankindex ist eine sortierte Datenstruktur in einem Datenbankverwaltungssystem, die das schnelle Abfragen und Aktualisieren von Daten in Datenbanktabellen unterstützt. Indizes werden normalerweise mithilfe von B-Bäumen und deren Varianten B+-Bäumen implementiert. Die obige Abbildung zeigt einen möglichen Indizierungsansatz. Links ist die Datentabelle, die zwei Spalten und sieben Datensätze enthält. Der ganz linke ist die physische Adresse des Datensatzes (beachten Sie, dass logisch benachbarte Datensätze auf der Festplatte nicht unbedingt physisch benachbart sind). Um die Suche in Spalte 2 zu beschleunigen, können wir einen binären Suchbaum wie rechts gezeigt pflegen. Jeder Knoten enthält einen Indexschlüsselwert und einen Zeiger auf die physikalische Adresse des entsprechenden Datensatzes. Auf diese Weise können wir die binäre Suche verwenden, um die entsprechenden Daten innerhalb der Komplexität von O(log2n) zu erhalten. Durch das Erstellen von Indizes kann die Systemleistung erheblich verbessert werden. Erstens kann durch die Erstellung eines eindeutigen Indexes die Eindeutigkeit jeder Datenzeile in der Datenbanktabelle gewährleistet werden. Manche Leute fragen sich vielleicht: Da das Hinzufügen von Indizes so viele Vorteile hat, warum nicht für jede Spalte in der Tabelle einen Index erstellen? Denn das Hinzufügen von Indizes hat auch viele Nachteile. Erstens nimmt das Erstellen und Verwalten von Indizes Zeit in Anspruch, und dieser Zeitaufwand erhöht sich mit der zunehmenden Datenmenge. Indizes werden für bestimmte Spalten in einer Datenbanktabelle erstellt. Beim Erstellen eines Index sollten Sie berücksichtigen, welche Spalten indiziert werden können und welche nicht. Im Allgemeinen sollten Indizes für die folgenden Spalten erstellt werden: für häufig durchsuchte Spalten, um die Suchvorgänge zu beschleunigen; für Spalten, die als Primärschlüssel dienen, um die Eindeutigkeit der Spalte zu gewährleisten und die Datenstruktur in der Tabelle zu organisieren; für Spalten, die häufig in Verknüpfungen verwendet werden und bei denen es sich hauptsächlich um Fremdschlüssel handelt, um Verknüpfungen zu beschleunigen; erstellen Sie Indizes für Spalten, in denen häufig auf Basis von Bereichen gesucht wird, da der Index bereits sortiert ist und der angegebene Bereich fortlaufend ist; erstellen Sie Indizes für häufig sortierte Spalten, da der Index bereits sortiert ist, sodass Abfragen die Indexsortierung ausnutzen können, um die Sortierabfragezeit zu beschleunigen; erstellen Sie Indizes für Spalten, die häufig in WHERE-Klauseln verwendet werden, um die Bedingungsbestimmung zu beschleunigen. Ebenso gibt es einige Spalten, für die keine Indizes erstellt werden sollten. Im Allgemeinen weisen Spalten, die nicht indiziert werden sollten, die folgenden Merkmale auf: Erstens sollten Sie keine Indizes für Spalten erstellen, die selten verwendet oder in Abfragen referenziert werden. Dies liegt daran, dass diese Spalten selten verwendet werden und sich die Abfragegeschwindigkeit weder durch ihre Indizierung noch durch Nichtindizierung verbessern lässt. Im Gegenteil, das Hinzufügen von Indizes reduziert die Systemwartungsgeschwindigkeit und erhöht den Platzbedarf. Abhängig von den Fähigkeiten der Datenbank können im Datenbank-Designer drei Indextypen erstellt werden: eindeutiger Index, Primärschlüsselindex und gruppierter Index. Eindeutiger Index Ein eindeutiger Index lässt nicht zu, dass zwei Zeilen denselben Indexwert haben. Lokalitätsprinzip und Disk-Pre-Reading Aufgrund der Eigenschaften von Speichermedien ist der Festplattenzugriff selbst viel langsamer als der Hauptspeicher. Zusätzlich zum mechanischen Bewegungsverbrauch beträgt die Festplattenzugriffsgeschwindigkeit oft einige Hundertstel der Hauptspeichergeschwindigkeit. Um die Effizienz zu verbessern, sollte daher der Festplatten-E/A minimiert werden. Um dieses Ziel zu erreichen, wird die Platte oft nicht strikt bei Bedarf ausgelesen, sondern jedes Mal vorab. Selbst wenn nur ein Byte benötigt wird, startet die Platte an dieser Stelle und liest eine bestimmte Datenlänge sequenziell rückwärts in den Speicher ein. Die theoretische Grundlage hierfür ist das berühmte Lokalitätsprinzip der Informatik: Wenn ein Datenelement verwendet wird, werden in der Regel sofort auch die nahegelegenen Daten verwendet. Die während der Programmausführung benötigten Daten werden üblicherweise konzentriert. Leistungsanalyse von B-/+Tree-Indizes Jetzt können wir endlich die Leistung des B-/+Tree-Index analysieren. Zusammenfassend ist die Verwendung von B-Tree als Indexstruktur sehr effizient. Sie sollten sich die Zeit nehmen, sich mit B-Baum- und B+-Baum-Datenstrukturen vertraut zu machen. 1) B-Baum Jeder Knoten in einem B-Baum enthält einen Schlüsselwert und einen Zeiger auf die Adresse des Datenobjekts, das dem Schlüsselwert entspricht. Für eine erfolgreiche Suche nach einem Objekt ist es daher nicht erforderlich, den Blattknoten des Baums zu erreichen. 2) B+ Baum Der im Nicht-Blattknoten des B+-Baums gespeicherte Schlüsselcode gibt nicht den Adresszeiger des Datenobjekts an. Der Nicht-Blattknoten ist nur der Indexteil. Alle Blattknoten befinden sich auf derselben Ebene und enthalten alle Schlüsselcodes und Speicheradresszeiger der entsprechenden Datenobjekte. Die Blattknoten sind entsprechend dem Schlüsselcode in aufsteigender Reihenfolge verknüpft. Wenn die eigentlichen Datenobjekte in der Reihenfolge gespeichert werden, in der sie hinzugefügt werden, und nicht nach Schlüsselnummer, muss der Blattknotenindex ein dichter Index sein. Wenn die eigentlichen Daten in Schlüsselreihenfolge gespeichert werden, ist der Blattknotenindex ein spärlicher Index. Die Kosten der IndizierungBelegter Speicherplatz Auswirkungen auf die Effizienz von DML-Anweisungen (Update, Delete, Insert) Hinzufügungen, Löschungen und Änderungen wirken sich auf den Index aus, da der Index neu organisiert werden muss.
Welche Spalten eignen sich zum Hinzufügen von Indizes? ① Das als Abfragebedingung verwendete Abfragefeld sollte indiziert werden. ② Das Feld mit geringer Eindeutigkeit eignet sich nicht allein zum Erstellen eines Index, selbst wenn es häufig verwendet wird. Wählen Sie * aus emp, wobei Geschlecht = "männlich" ist ③Aktualisieren Sie Felder häufig und definieren Sie keine Indizes. Zusammenfassung: Indizes sollten nur für Felder erstellt werden, die die folgenden Bedingungen erfüllen: ① Es muss häufig in der Where-Bedingung verwendet werden. ② Der Inhalt des Felds besteht nicht aus wenigen eindeutigen Werten. ③ Der Feldinhalt ändert sich nicht häufig. Hinweise zur IndizierungErstellen einer Tabelle Abteilungsdaten hinzufügen Erstellen Sie das VERFAHREN insert_dept(in start int(10),in max_num int(10)) BEGINNEN deklariere i int DEFAULT 0; setze Autocommit=0; WIEDERHOLEN setze i=i+1; in Abteilungswerte einfügen ((start+i),rand_string(10),rand_string(8)); BIS i = max_num Ende WIEDERHOLEN; begehen; ENDE Führen Sie den Aufruf insert_dept(100,10) aus. Erstellen eines Primärschlüsselindexes Tabelle ändern, Tabellenname, Primärschlüssel hinzufügen (Spaltenname); Erstellen eines gemeinsamen Indexes alter table dept add index my_ind (dname,loc); // dname ist die Spalte links, loc ist die Spalte rechts Beachten: 1. Wenn für einen erstellten mehrspaltigen Index der erste Teil nicht verwendet wird, wird der Index nicht erstellt. Abfrage der NutzungsrateStatus wie „handler_read%“ anzeigen; Darauf kann jeder achten: handler_read_key: Je höher der Wert, desto besser. Ein höherer Wert gibt an, wie oft der Index für Abfragen verwendet wird. Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „Zusammenfassung der Kenntnisse im Bereich MySQL-Indexoperationen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-Allgemeinfunktionen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-Protokolloperationen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-Transaktionsoperationen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-gespeicherte Prozeduren“ und „Zusammenfassung der Kenntnisse im Zusammenhang mit MySQL-Datenbanksperren“. Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist. Das könnte Sie auch interessieren:
|
<<: Zusammenfassung der 10 am häufigsten gestellten Fragen in Linux-Interviews
>>: JavaScript zum Erzielen von Feuerwerkseffekten (objektorientiert)
1. Vue – Das erste Vue-CLI-Programm Die Entwicklu...
Inhaltsverzeichnis DOM Knoten Elementknoten: Text...
Nachfrage: Diese Nachfrage ist ein dringender Bed...
Vorwort Unabhängig davon, ob es sich um Oracle od...
Inhaltsverzeichnis Das Verfahren Im Objekt Verste...
Inhaltsverzeichnis Strukturelle Vererbung (implem...
Stellungnahme : In diesem Artikel erfahren Sie, w...
Hafen Harbor ist eine Open-Source-Lösung zum Erst...
Inhaltsverzeichnis 1. Einleitung 2. filter() 3. K...
In den letzten Projekten werden viele Formulare e...
Es gibt zwei Möglichkeiten, Daten in MySQL zu lös...
Reproduktion des Problems Alibaba Cloud Server, b...
1. Laden Sie das Gitlab-Image herunter Docker-Pul...
Im Projekt werden häufig Formulartests durchgefüh...
Wenn wir Frontend-Entwicklung betreiben, werden w...