Teilen Sie einige wichtige Interviewfragen zum MySQL-Index

Teilen Sie einige wichtige Interviewfragen zum MySQL-Index

Vorwort

Ein Index ist eine Datenstruktur, die einen oder mehrere Spaltenwerte in einer Datenbank sortiert und der Datenbank hilft, effizient an Daten zu gelangen.

Um es analog auszudrücken: Der Index in der Datenbank entspricht dem Inhaltsverzeichnis eines Buches. Wenn wir einen Wissenspunkt im Buch finden möchten, können wir direkt im Inhaltsverzeichnis danach suchen, anstatt jede Seite des Buches durchsuchen zu müssen. Dies bringt jedoch auch einen Nachteil des Indexes mit sich. Wenn die Datenbank geändert wird, dauert die Änderung des Indexes länger.

Aber verstehen Sie MySQL-Indizes wirklich? Diese Fragen helfen Ihnen, einige wichtige Punkte zu Indizes zu verstehen.

1. Was ist das Prinzip des ganz linken Präfixes?

Die folgenden Antworten basieren alle auf der InnoDB-Engine von MySQL

Beispielsweise für die folgende Tabelle

Wenn wir einen Index basierend auf dem Namensfeld erstellen und dabei eine B+-Baumstruktur verwenden, sieht die ungefähre Indexstruktur wie folgt aus:

Wenn wir eine Fuzzy-Suche durchführen möchten, um die IDs aller Personen zu finden, deren Namen mit "张" beginnen, lautet die SQL-Anweisung

Wählen Sie eine ID aus einer Tabelle mit einem Namen wie „张%“

Denn im B+-Baumstrukturindex werden die Indexelemente nach der Reihenfolge der Felder sortiert, die in der Indexdefinition erscheinen. Bei der Suche kann der Index Zhang Yi mit der ID 100 schnell finden und dann direkt nach rechts alle Personen durchlaufen, deren Namen mit Zhang beginnen, bis die Bedingung nicht mehr erfüllt ist.

Das heißt, nachdem wir die erste Person gefunden haben, die die Bedingungen erfüllt, können wir direkt nach rechts gehen. Da der Index geordnet ist, werden alle Personen, die die Bedingungen erfüllen, zusammengeführt.

Diese Methode der Positionierung nach links und anschließenden Durchquerung nach rechts nennen wir das Prinzip des äußersten linken Präfixes.

2. Warum einen B+-Baum statt einer Hash-Tabelle als Index verwenden?

1. Die Hash-Tabelle ordnet das Indexfeld dem entsprechenden Hash-Code zu und speichert es dann an der entsprechenden Position. Wenn wir also eine Fuzzy-Suche durchführen möchten, wird die Hash-Tabellenstruktur offensichtlich nicht unterstützt und wir können nur die Tabelle durchlaufen. Der B+-Baum kann die entsprechenden Daten durch das Prinzip des ganz linken Präfixes schnell finden.

2. Wenn wir eine Bereichssuche durchführen möchten, z. B. nach Personen mit IDs zwischen 100 und 400 suchen, unterstützt die Hash-Tabelle dies ebenfalls nicht und wir können nur die gesamte Tabelle durchlaufen.

3. Das Indexfeld wird durch Hashing in einen Hashcode abgebildet. Wenn viele Felder zufällig dem Hashcode desselben Werts zugeordnet werden, ist die resultierende Indexstruktur eine sehr lange verknüpfte Liste, was die Suchzeit erheblich verlängert.

3. Was ist der Unterschied zwischen einem Primärschlüsselindex und einem Nicht-Primärschlüsselindex?

Beispielsweise ist für die folgende Tabelle (tatsächlich wird der obigen Tabelle ein k-Feld hinzugefügt) die ID der Primärschlüssel.

Das schematische Diagramm des Primärschlüsselindex und des Nicht-Primärschlüsselindex ist wie folgt:

Wobei R den Wert einer ganzen Zeile darstellt.

Aus der Abbildung ist nicht schwer zu erkennen, dass der Unterschied zwischen dem Primärschlüsselindex und dem Nicht-Primärschlüsselindex darin besteht, dass die Blattknoten des Nicht-Primärschlüsselindex den Primärschlüsselwert speichern, während die Blattknoten des Primärschlüsselindex die gesamte Datenzeile speichern. Der Nicht-Primärschlüsselindex wird auch als Sekundärindex bezeichnet, und der Primärschlüsselindex wird auch als Clusterindex bezeichnet.

Lassen Sie uns Abfragen auf Grundlage dieser beiden Strukturen durchführen, um die Unterschiede zwischen den Abfragen zu ermitteln.

1. Wenn die Abfrageanweisung select * from table where ID = 100 lautet, also die Abfragemethode mit Primärschlüssel ist, muss nur der B+-Baum der ID durchsucht werden.

2. Wenn die Abfrageanweisung select * from table where k = 1 lautet, also eine Nicht-Primärschlüsselabfrage ist, wird zuerst der k-Indexbaum durchsucht, um ID = 100 zu erhalten, und dann wird der ID-Indexbaum erneut durchsucht. Dieser Vorgang wird auch als Tabellenrückgabe bezeichnet.

Kennen Sie nun den Unterschied zwischen ihnen?

4. Warum wird die Verwendung eines automatisch inkrementierenden Primärschlüsselindex empfohlen?

Für diesen Primärschlüssel-Indexbaum

Wenn wir eine Datenzeile mit der ID = 650 einfügen, können wir sie einfach ganz rechts einfügen.

Wenn jedoch eine Datenzeile mit der ID = 350 eingefügt wird, müssen, da der B+-Baum geordnet ist, die darunter liegenden Blattknoten verschoben werden, um Platz zum Einfügen der Daten mit der ID = 350 zu schaffen, was zeitaufwändig ist. Wenn die Datenseite, auf der sich R4 befindet, voll ist, ist eine Seitenaufteilung erforderlich, was noch schlimmer ist.

Wenn unser Primärschlüssel jedoch automatisch inkrementell ist, ist jede eingefügte ID größer als die vorherige, sodass wir sie jedes Mal nur am Ende einfügen müssen, ohne die Position zu verschieben, aufzuteilen usw., was die Leistung verbessern kann. Aus diesem Grund wird empfohlen, einen Index mit automatisch inkrementierendem Primärschlüssel zu verwenden.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Mysql FAQ-Sammlung
  • Einführung in die neuesten 21 MySQL-Hochfrequenz-Interviewfragen im Jahr 2019
  • Fortgeschrittene MySQL-Datenbank-Interviewfragen mit Antworten
  • Antworten auf mehrere häufig gestellte MySQL-Interviewfragen
  • Eine Sammlung von MySQL-Fragen und -Antworten, die häufig in Interviews gestellt werden, um eine solide Grundlage zu schaffen

<<:  Eine kurze Analyse der Verwendung von watchEffect in Vue3

>>:  Der Prozess der Installation von SVN auf Ubuntu 16.04.5LTS

Artikel empfehlen

Semantisierung von HTML-Tags (einschließlich H5)

einführen HTML stellt die kontextuelle Struktur u...

Zusammenfassung der MySQL-Anweisungen

Inhaltsverzeichnis 1. Datenbank USE auswählen 2. ...

Implementierung von 2D- und 3D-Transformationen in CSS3

CSS3 implementiert 2D-Ebenentransformation und vi...

Was muss ich tun, wenn ich einen fehlerhaften MySQL-Befehl abbrechen möchte?

Ich habe einen falschen MySQL-Befehl eingegeben u...

Detaillierte Erklärung der TMPF-Mounts im Docker-Datenspeicher

Bevor Sie diesen Artikel lesen, hoffe ich, dass S...

So erstellen Sie ein standardisiertes VMware-Image für Kubernetes unter Rancher

Wenn wir Kubernetes lernen, müssen wir in der Kub...

Lösung für das Problem, dass Docker-Protokolle nicht abgerufen werden können

Als ich den Dienst täglich überprüfte und mir die...