Zusätzlich zu den B-Tree-Indizes bietet MySQL auch die folgenden Indizes:
Wird nur von der Memory Engine unterstützt, einfache Szenarien
Ein spezieller Indextyp von MyISAM, der hauptsächlich für geografische räumliche Datentypen verwendet wird
Ein spezieller Index von MyISAM, der hauptsächlich für die Volltextindizierung verwendet wird. Ab MySQL 5.6 unterstützt InnoDB die Volltextindizierung. Index/ Speicher-EngineMyISAMInnoDBMemoryB-Tree IndexUnterstützungUnterstützungUnterstützungHASH IndexUnterstützungUnterstützungUnterstützungR-Tree IndexUnterstützungUnterstützungVolltext IndexUnterstützungUnterstützungUnterstützung Die am häufigsten verwendeten Indizes sind B-Tree-Index und Hash-Index, und nur Memory- und NDB-Engines unterstützen Hash-Index. Der Hash-Index eignet sich für Schlüssel-Wert-Abfragen, und Abfragen über den Hash-Index sind schneller als B-Tree-Index. Hash-Indizes unterstützen jedoch keine Bereichssuchen wie <><==, >== usw. Der Speicher verwendet den Hash-Index nur unter der Bedingung "=" MySQL 8.0 unterstützt funktionale Indizes. Zuvor konnte nur der vordere Teil einer Spalte indiziert werden. Beispielsweise konnten bei einem Titelfeld nur die ersten 10 Zeichen des Titels indiziert werden. Diese Funktion reduziert die Größe der Indexdatei erheblich, aber Präfixindizes haben auch Nachteile und sind bei Order-By- und Group-By-Operationen ungültig. Erstelle den Index idx_title für Film(Titel(10)); 1 MerkmaleEs gibt nur ein Array, mithilfe einer Hash-Funktion wird der Schlüssel in einen bestimmten Speicherplatz konvertiert und anschließend wird der Wert an dieser Stelle im Array abgelegt. Bei der Verwendung von Hashes besteht natürlich die Möglichkeit von Hash-Konflikten, und MySQL verwendet die Zipper-Methode, um diese zu lösen. Hash-Indizes werden basierend auf Hash-Tabellen implementiert. Hash-Indizes können nur verwendet werden, wenn die Abfragebedingungen genau mit den Spalten im Hash-Index übereinstimmen. Für alle Spalten im Hash-Index berechnet die Speicher-Engine einen Hashcode für jede Zeile, und der Hashcode wird im Hash-Index gespeichert.
Beispielsweise möchten wir den Benutzernamen überprüfen, der zu ID_card_n4 gehört:
Die vier ID_card_n-Werte müssen nicht unbedingt der Reihe nach ansteigen, sodass die Geschwindigkeit auch beim Hinzufügen eines neuen Benutzers hoch ist und nur am Ende angehängt werden muss. Natürlich liegen auch die Nachteile auf der Hand: Es ist nicht geordnet, sodass der Hash-Index bei Intervallabfragen sehr langsam ist. Wenn Sie beispielsweise alle Benutzer finden möchten, deren ID-Nummern im Bereich [ID_card_X, ID_card_Y] liegen, müssen Sie die gesamte Tabelle scannen. 2 Hash-Index-Defekte
Um InnoDB oder MyISAM dazu zu bringen, Hash-Indexe zu unterstützen, kann dies durch einen Pseudo-Hash-Index, einen sogenannten adaptiven Hash-Index, implementiert werden. Sie können ein Feld zum Speichern des Hash-Werts hinzufügen, den Hash-Wert indizieren und einen Trigger erstellen, um den berechneten Hash beim Einfügen und Aktualisieren automatisch zur Tabelle hinzuzufügen. Die Hashtabellenstruktur eignet sich für Szenarien, in denen nur Abfragen mit gleichwertigen Werten erforderlich sind, wie beispielsweise Memcached. 3 FallanwendungAngenommen, es gibt eine sehr große Tabelle. Wenn sich beispielsweise ein Benutzer anmeldet, müssen Sie den Benutzer per E-Mail abrufen. Wenn Sie einen Index direkt für die E-Mail-Spalte erstellen, müssen Sie zusätzlich zum Indexbereichsabgleich auch einen Zeichenfolgenabgleich durchführen. Es ist in Ordnung, wenn die E-Mail kurz ist, aber wenn sie lang ist, sind die Abfragekosten relativ hoch. Wenn zu diesem Zeitpunkt ein Hash-Index für die E-Mail erstellt und die Abfrage mit int ausgeführt wird, ist die Leistung viel schneller als bei einer Zeichenfolgenvergleichsabfrage. Hash-AlgorithmenUm einen Hash-Index zu erstellen, müssen Sie zuerst einen Hash-Algorithmus auswählen, beispielsweise den in „High Performance MySQL“ erwähnten CRC32-Algorithmus. INSERT UPDATE SELECT OperationenFügen Sie der Tabelle ein Hashwertfeld hinzu: ALTER TABLE „Benutzer“ ADD COLUMN email_hash int unsigned NOT NULL DEFAULT 0; Der nächste Schritt besteht darin, das Feld „email_hash“ während UPDATE und INSERT automatisch zu aktualisieren, was durch Trigger erreicht wird: TRENNUNGSZEICHEN | Erstellen Sie den Trigger user_hash_insert vor dem INSERT auf `User` für jede Zeile beginnen SETZEN SIE NEW.email_hash=crc32(NEW.email); ENDE; | Erstellen Sie den Trigger user_hash_update vor dem Update auf `User` für jede Zeile beginnen SETZEN SIE NEW.email_hash=crc32(NEW.email); ENDE; | TRENNUNGSZEICHEN ; Die SELECT-Anfrage wird dann zu: SELECT `email`, `email_hash` FROM `Benutzer` WHERE email_hash = CRC32(„[email protected]“) UND `E-Mail` = "[email protected]";
UND E-Mail = „[email protected]“ dient dazu, Datenungenauigkeiten im Falle einer Hash-Kollision zu vermeiden. Dies ist das Ende dieses Artikels zum Einrichten eines Hash-Index in MySQL-Interviewfragen. Weitere Informationen zum Einrichten eines Hash-Index in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Zwei Methoden zum Strecken des Hintergrundbilds einer Webseite
>>: Grundlegendes Lernprogramm zum Tabellen-Tag in HTML
Inhaltsverzeichnis 1.JSON-Zeichenfolge 1.1Json-Sy...
Inhaltsverzeichnis Vorwort 1. Die übergeordnete K...
Vorwort Die Rolle des Prozessmanagements: Integri...
herunterladen: Schritt 1: Öffnen Sie die Website ...
Vorbereitung 1. Umgebungsbeschreibung: Betriebssy...
Inhaltsverzeichnis DML-Anweisungen 1. Datensätze ...
Rand paralleler Boxen (Überlappung doppelter Ränd...
Für eine Website ist dies die grundlegendste Funkt...
Ich erinnere mich, dass es vor ein paar Jahren in...
Wenn MySQL normal ausgeführt wird, ist es nicht s...
Inhaltsverzeichnis Vorwort Parameter analysieren ...
In diesem Artikel wird der spezifische Code für j...
Ja, CSS hat auch reguläre Ausdrücke (Amen) Zwei l...
Es gibt eine Interviewfrage, die Folgendes erforde...
Inhaltsverzeichnis JavaScript-Prototypenkette Obj...