Heim  >  Artikel  >  Datenbank  >  Was ist ein MySQL-Index und wie wird er verwendet? Sehr detailliert organisiert

Was ist ein MySQL-Index und wie wird er verwendet? Sehr detailliert organisiert

php是最好的语言
php是最好的语言Original
2018-07-30 17:08:361379Durchsuche

Wenn Sie MySQL lernen, stoßen Sie häufig auf Indizes. Was ist ein Index? Ich wusste vorher nur vage, wie man es benutzt, aber es war ein bisschen schwierig für mich, es zu erklären, also habe ich meine freie Zeit genutzt, um ein paar Bücher zu lesen, nur für den Fall, dass mich in Zukunft jemand fragen sollte, habe ich es geklärt und Ich habe es aufgeschrieben, was mir doch einige Eindrücke vermittelt hat, und es ist ziemlich peinlich, nein zu sagen. Reden wir doch nicht über die wichtigsten Punkte Apache PHP MySQL:

beginnen!

1. Was ist ein Index

1. Einführung in den Index
Index ist eigentlich eine Datenstruktur, die in Form einer Datei auf der Festplatte gespeichert ist. Für den Indexabruf sind Festplatten-E/A-Vorgänge erforderlich. Im Gegensatz zum Hauptspeicher fallen bei Festplatten-I/O Kosten für mechanische Bewegung an, sodass der Zeitaufwand für Festplatten-I/O enorm ist.

2. Einführung in IO
IO bezieht sich auf die Eingabe und Ausgabe in Computern. Da sich Programme und Laufzeitdaten im Speicher befinden, werden sie vom ultraschnellen Rechenkern der CPU ausgeführt, was einen Datenaustausch beinhaltet . Orte, normalerweise Festplatten, Netzwerke usw., erfordern IO-Schnittstellen. Lebensbeispiel: Alle wichtigen Dinge, an die man sich erinnern muss, müssen in ein Notizbuch geschrieben werden. Nehmen Sie sie heraus und lesen Sie sie jedes Mal, wenn Sie zum Lesen der Aufzeichnungen gehen Merken Sie sich diese Angelegenheit, sie können sie direkt vorlesen, dies ist der Cache (er kann nicht ständig im Computer gespeichert werden).

2. Indexalgorithmus

1 Die Datenbank wird grundsätzlich mit dem B+Tree-Algorithmus implementiert

2. O Die Häufigkeit, mit der die Qualität der Indexstruktur bewertet werden soll

3.B-Tree
(1) Die Definition von B-Tree zeigt, dass auf maximal h-1 Knoten zugegriffen werden muss ein Abruf (der Wurzelknoten befindet sich im Speicher). Der Designer des Datenbanksystems nutzte geschickt das Disk-Read-Ahead-Prinzip und legte die Größe eines Knotens auf eine Seite fest, sodass jeder Knoten nur einen I/O benötigt, um vollständig geladen zu werden

(2) Die tatsächliche Implementierung von B-Tree erfordert außerdem die folgenden Fähigkeiten: Jedes Mal, wenn ein neuer Knoten erstellt wird, wird der Speicherplatz auf einer Seite direkt beansprucht. Dadurch wird sichergestellt, dass ein Knoten physisch auf einer Seite gespeichert wird Die Speicherzuweisung erfolgt seitenorientiert, und dies wird erreicht. Ein Knoten benötigt nur eine E/A

(3) Bei Verwendung der B-Tree-Speicherstruktur überschreitet die Anzahl der E/As während der Suche im Allgemeinen nicht das Dreifache Daher ist die Verwendung von B-Tree als Indexstruktur sehr effizient, aber die Knoten im B-Tree können je nach tatsächlicher Situation eine große Menge an Schlüsselwortinformationen und Verzweigungen enthalten

4.B+Tree
(1) Die Suchkomplexität von B-Tree beträgt O(h)=O(logdN). Je größer also der Außengrad d des Baums, desto kleiner die Tiefe h und desto geringer die Anzahl der E/As. B+Tree kann die Breite von Out-Grade d genau erhöhen, da die Größe jedes Knotens eine Seitengröße beträgt, sodass die Obergrenze von Out-Grade von der Größe des Schlüssels und der Daten im Knoten abhängt

(2) Da B+Tree Die Daten werden aus dem inneren Knoten entfernt, sodass sie einen größeren Out-Grad haben und somit eine bessere Leistung erzielen können

3.Clustered-Index und Non-Clustered-Index

1. Clustering-Cluster-Index
(1) Die physische Speicherreihenfolge der Cluster-Indexdaten stimmt mit der Indexreihenfolge überein, das heißt: Solange die Indizes benachbart sind, müssen auch die entsprechenden Daten vorhanden sein nebeneinander auf der Festplatte gespeichert werden. Clustered-Indizes sind viel effizienter als nicht-clusterierte Indexabfragen

(3) Jede Tabelle kann nur einen Clustered-Index haben, da Datensätze in einer Tabelle nur in einer physischen Reihenfolge gespeichert werden können

( 4) Innodbs Standardindex

2. Nicht gruppierter Index

(1) Nicht gruppierter Index, ähnlich dem Anhang eines Buches, in dem der Fachbegriff vorkommt, diese Die technische Begriffe sind in Ordnung, die Position, an der sie erscheinen, jedoch nicht. Eine Tabelle kann jedoch mehr als einen nicht gruppierten Index haben

(2) Das Implementierungsprinzip besteht darin, Blattknoten zum Speichern der Primärschlüssel von Referenzzeilen zu verwenden (man kann sagen, dass es sich um gruppierte Indizes handelt)

(3) Clustered-Index Es handelt sich um einen Index eines nicht gruppierten Indexes, d. Der Hilfsindexbaum muss nicht aktualisiert werden, da der Hilfsindexbaum das Primärschlüsselwort des Primärindex und nicht die spezifische physische Adresse der Daten speichert

(4) Daher der nicht gruppierte Index muss zweimal auf den Index zugreifen

4. Indextyp

1.UNIQUE (eindeutiger Index): Der gleiche Wert kann nicht erscheinen und ein NULL-Wert ist zulässig

2.INDEX (gewöhnlicher Index): Der gleiche Indexinhalt ist zulässig

3.PROMARY KEY (Primärschlüsselindex): Der gleiche Wert ist nicht zulässig

4.VOLLTEXTINDEX (Volltextindex): Es kann auf ein bestimmtes Wort im Wert abzielen, aber die Effizienz ist sehr schlecht

5. Kombinierter Index: Im Wesentlichen werden mehrere Felder in einen Index integriert und die Spaltenwerte kombiniert ​​muss eindeutig sein

5. Indexfähigkeiten

1 Der Index enthält keine NULL-Spalten

(1) Solange die Spalte Enthält NULL-Werte, wird sie nicht in den Index aufgenommen. Solange es eine Spalte im zusammengesetzten Index gibt, die NULL-Werte enthält, wird diese Spalte nicht in den Index aufgenommen. Sie ist ungültig, wenn sie mit dem Index

2. Verwenden Sie den Kurzindex

(1), um die Zeichenfolge zu indizieren. Wenn möglich, sollten Sie eine Präfixlänge angeben. Wenn Sie beispielsweise eine Spalte mit char(255) haben, indizieren Sie nicht die gesamte Spalte, wenn die meisten Werte innerhalb der ersten 10 oder 20 Zeichen eindeutig sind. Kurze Indizes verbessern nicht nur die Abfragegeschwindigkeit, sondern sparen auch Speicherplatz und E/A-Vorgänge

3. Indexspaltensortierung

(1) Die MySQL-Abfrage verwendet nur einen Index. Wenn der Index also in der Where-Klausel verwendet wurde, verwenden die Spalten in der Reihenfolge nach nicht den Index. Verwenden Sie daher keine Sortiervorgänge, wenn die Standardsortierung der Datenbank die Anforderungen erfüllen kann. Bei Bedarf ist es am besten, zusammengesetzte Indizes für diese Spalten zu erstellen

4 Anweisungsoperationen

(1) Im Allgemeinen wird von der Verwendung ähnlicher Operationen abgeraten. Wenn sie verwendet werden müssen, achten Sie auf die richtige Verwendungsweise. „%aaa%“ verwendet keine Indizes, aber „aaa%“ kann Indizes verwenden

5. Führen Sie keine Operationen für Spalten aus.

6. > ;,! = Operation, aber <,<=, =,>,>=,BETWEEN,IN kann einen Index verwenden

7 Der Index sollte für die Felder erstellt werden, in denen Auswahloperationen häufig ausgeführt werden

(1) Dies liegt daran, dass das Vorhandensein oder Fehlen von Indizes die Abfragegeschwindigkeit nicht wesentlich verändert, wenn diese Spalten selten verwendet werden. Im Gegenteil, durch das Hinzufügen von Indizes wird die Wartungsgeschwindigkeit des Systems verringert und der Platzbedarf erhöht

8. Indizes sollten für Felder mit relativ eindeutigen Werten erstellt werden

9. Für diejenigen, die als Spalten mit Text-, Bild- und Bit-Datentypen definiert sind, sollte nicht indiziert werden. Da die Datenmenge in diesen Spalten entweder ziemlich groß ist oder nur sehr wenige Werte enthält, müssen die Spalten, die in where und joint erscheinen, indiziert werden.

11 Melden Sie sich in der Abfragebedingung von where (where-Spalte != …) an, MySQL kann den Index nicht verwenden

12 Wenn eine Funktion in der Abfragebedingung der where-Klausel verwendet wird (z. B.: where DAY(column)=…), MySQL kann den Index nicht verwenden

13. Bei der Join-Operation (wenn Daten aus mehreren Datentabellen extrahiert werden müssen) kann MySQL den Index nur verwenden, wenn der Der Datentyp des Primärschlüssels und des Fremdschlüssels ist derselbe, andernfalls wird der Index nicht verwendet, wenn er rechtzeitig erstellt wird

14.explain kann Entwicklern bei der Analyse von SQL-Problemen helfen. Explain zeigt, wie MySQL Indizes verwendet Es kann dabei helfen, bessere Indizes auszuwählen und optimierte Abfrageanweisungen zu schreiben.

1 Beim Sperren handelt es sich um eine Zeilensperre. Wenn der Index nicht verwendet wird, handelt es sich um eine Tabellensperre. Daher müssen die zu bearbeitenden Daten gesperrt werden.

(1) Wenn kein Index, keine Datenauswahl oder Positionierung vorhanden ist Dies erfolgt durch einen vollständigen Tabellenscan, der eine Tabellensperre bildet. Wenn ein Index vorhanden ist, wird die angegebene Zeile direkt lokalisiert. Beachten Sie, dass hier eine Zeilensperre gebildet wird, wenn beim Aktualisieren von Daten kein Index verwendet wird. Die gesamte Tabelle wird gescannt

Ende

Der Großteil des Inhalts ist so. Normalerweise sammle ich einige Informationen und greife auf das Internet und Bücher zurück für einige unklare Informationen. Vielen Dank für Ihr Verständnis! Verwandte Artikel:

Wie und wann der MySQL-Indexname verwendet wird

Was ist ein Index? Derzeit gibt es in MySQL mehrere Hauptindextypen

Verwandte Videos:

Eine kurze Einführung in Indizes – ein sechstägiges Video-Tutorial, das Sie durch MySQL führt

Das obige ist der detaillierte Inhalt vonWas ist ein MySQL-Index und wie wird er verwendet? Sehr detailliert organisiert. 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