Wir haben zuvor die Prinzipien der Indizierung und Indexabfrage ausführlich vorgestellt. Wie das Sprichwort sagt: Wenn Sie Ihre Arbeit gut machen möchten, müssen Sie zuerst Ihre Werkzeuge schärfen. Während der Lernphase müssen Sie sich dieses Wissen Schritt für Schritt aneignen. Seien Sie nicht zu ehrgeizig. Sie müssen geduldig sein und danach streben, jeden Wissenspunkt nach dem Lernen sofort zu beherrschen und ihn dann anzuwenden. Wir haben im vorherigen Artikel besprochen, dass das Design des Indexes auf MySQL verwaltet eine B+-Baumstruktur für den Primärschlüsselindex, die wir als Clustered-Index bezeichnen. Für Nicht-Primärschlüssel (im Allgemeinen gemeinsame Indizes) werden die Indexfelder der Reihe nach sortiert, und dann beginnt der Vergleich mit dem ersten Feldwert. Wenn der erste Feldwert gleich ist, wird der nächste Feldwert verglichen und so weiter. Sind die Feldwerte im gemeinsamen Index gleich, erfolgt eine Sortierung nach dem Primärschlüssel. Darüber hinaus speichert der B + -Baum des gruppierten Index (Primärschlüsselindex) alle Informationen einer Datensatzzeile, während der nicht gruppierte Index (Nicht-Primärschlüsselindex) nur die Indexfeldwerte und die Primärschlüsselfeldwerte speichert. Nun, das ist alles, was wir zur Überprüfung der Indexprinzipien zu sagen haben. In diesem Artikel werden wir weiterhin die Grundprinzipien der MySQL-Einstellungen vorstellen. Dies ist auch leicht zu verstehen. Es geht darum, welche Prinzipien beim Entwerfen und Erstellen von Indizes befolgt werden müssen und wie Indizes gemäß den „Standards“ erstellt werden. Heute erklären wir alle Prinzipien des Indexdesigns auf einmal. Lassen Sie mich noch ein paar Worte zu diesem Wissenspunkt sagen. Bei Vorstellungsgesprächen stelle ich den Kandidaten diese Frage häufig, um herauszufinden, ob sie den Index wirklich verstehen, anstatt einfach nur Fachjargon aufzusagen! PrimärschlüsselindexDer Primärschlüsselindex ist eigentlich der Einfachste, allerdings gibt es hier einige Dinge zu beachten, die ich nochmal erläutern möchte. Beim Entwurf des Primärschlüssels muss dieser automatisch inkrementell sein. Es wird dringend empfohlen, Warum? Da Wir befolgen noch immer die alten Regeln und zeichnen ein Bild, damit es jeder versteht Wenn der Primärschlüssel automatisch inkrementiert wird, muss MySQL nur das Primärschlüsselverzeichnis verwenden, um schnell zu finden, wo der neue Datensatz eingefügt werden soll. Wenn der Primärschlüssel nicht automatisch inkrementiert wird, muss jedes Mal von vorne begonnen werden, die richtige Position gefunden und dann der Datensatz eingefügt werden. Dies würde die Effizienz erheblich beeinträchtigen, daher muss der Primärschlüssel so konzipiert sein, dass er automatisch inkrementiert. Darüber hinaus ähnelt der eindeutige Index dem Primärschlüsselindex, er wächst jedoch nicht unbedingt selbst, sodass die Kosten für die Pflege des eindeutigen Index definitiv höher sind als für den Primärschlüsselindex. Der Wert eines eindeutigen Indexes ist jedoch eindeutig (ein eindeutiger Index kann den Wert NULL haben), sodass Sie einen Datensatz schneller über das Indexfeld ermitteln können, dafür aber möglicherweise eine Tabellenabfrage durchführen müssen (ich werde hier nicht näher darauf eingehen, was eine Tabellenabfrage ist, da dies bereits im vorherigen Artikel ausführlich erläutert wurde). Erstellen Sie Indizes für häufig abgefragte FelderWenn wir Indizes erstellen, müssen wir Indizes für Felder erstellen, die häufig als Abfragebedingungen verwendet werden, wodurch die Abfragegeschwindigkeit der gesamten Tabelle verbessert werden kann. Da die Abfragebedingung jedoch meist kein einzelnes Feld ist, werden meist mehrere gemeinsame Indizes erstellt. Darüber hinaus gibt es in den Abfragebedingungen normalerweise Fuzzy-Abfragen wie „like“. Wenn es sich um eine Fuzzy-Abfrage handelt, ist es am besten, dem Abfrageprinzip mit dem am weitesten links stehenden Präfix zu folgen. Vermeiden Sie die Indizierung großer FelderAnders ausgedrückt heißt das: Versuchen Sie, Felder mit kleinem Datenvolumen als Indizes zu verwenden. Angenommen, es gibt zwei solche Felder, eines ist Was ist, wenn Sie einen Index für INDEX ERSTELLEN tbl_address ON dual(adresse(20)); Wählen Sie eine Spalte mit hoher Trennschärfe als IndexWas bedeutet das? Ich glaube, jeder wird es sofort verstehen, wenn ich Ihnen ein Beispiel gebe. Angenommen, es gibt ein Feld „Geschlecht“ und der Wert der darin gespeicherten Daten ist entweder männlich oder weiblich, dann ist ein solches Feld nicht als Index geeignet. Das Hauptmerkmal des Wertes eines solchen Feldes ist, dass die Unterscheidung nicht hoch genug ist und Felder mit geringer Unterscheidung nicht für die Indizierung geeignet sind. Warum? Denn wenn die Wahrscheinlichkeit für das Auftreten eines Wertes nahezu gleich ist, ist es wahrscheinlich, dass Sie die Hälfte der Daten erhalten, unabhängig davon, nach welchem Wert Sie suchen. In diesen Fällen ist es besser, keinen Index zu haben, da MySQL auch über einen Abfrageoptimierer verfügt. Wenn der Abfrageoptimierer feststellt, dass ein bestimmter Wert in einem hohen Prozentsatz der Datenzeilen in der Tabelle vorkommt, ignoriert er im Allgemeinen den Index und führt einen vollständigen Tabellenscan durch. Die übliche Prozentgrenze liegt bei „30 %“. (Wenn die Menge der übereinstimmenden Daten eine bestimmte Grenze überschreitet, wird die Abfrage die Verwendung des Indexes abbrechen (dies ist auch eines der Szenarien, in denen der Index fehlschlägt). Hier ist der Grund. Nach der Lektüre dieses Artikels sollte meiner Meinung nach jeder wissen, warum wir die Verwendung von Feldern mit geringer Kardinalität als Indizes vermeiden sollten. Tatsächlich handelt es sich hierbei um einen Versuchen Sie, Indizes für Felder nach ORDER BY und GROUP BY zu erstellen Erstellen Sie einen Index für das Feld nach Denn wenn Wenn die Felder nach Der schwierige Teil besteht jedoch darin, dass, wenn sich
Verwenden Sie keine Funktionen in BedingungssätzenWenn eine Funktionsoperation auf einem Feld eines festgelegten Indexes ausgeführt wird, kann der Index nicht verwendet werden. warum ist das so? Da der Aber was soll ich tun, wenn jemand stur ist und ich die Funktion nutzen möchte? Sie können Ihr Geschäft nicht nur der Indexierung wegen ändern, oder? Wenn der Index aufgrund der Verwendung interner Was bedeutet das? Angenommen, es gibt ein Feld namens SELECT * FROM student WHERE rund(Alter) = 2; Der Index wird derzeit nicht verwendet. Wenn Sie wirklich möchten, dass Erstelle den Index stu_age_round bei Test(round(age)); Wenn Sie zu diesem Zeitpunkt die Abfrage mit der oben beschriebenen Methode durchführen, wird der Index wirksam. Ich glaube, das kann jeder verstehen. Erstellen Sie nicht zu viele IndizesDa MySQL zum Verwalten der Indizes Speicherplatz benötigt und Leistung verbraucht, verwaltet MySQL für jedes Indexfeld einen B+-Baum. Wenn also zu viele Indizes vorhanden sind, erhöht dies zweifellos die Belastung von MySQL. Erstellen Sie keine Indizes für Felder, die häufig hinzugefügt, gelöscht oder geändert werden. Dies ist leicht zu verstehen, da Angenommen, ein Feld wird häufig geändert, bedeutet dies, dass der Index häufig neu erstellt werden muss, was sich zwangsläufig auf die Leistung von MySQL auswirkt. Mehr verrate ich hier nicht. Das meiste, worüber wir hier gesprochen haben, sind einige Prinzipien, die beim Entwerfen beachtet werden müssen. Tatsächlich müssen die tatsächlichen Prinzipien noch entsprechend dem tatsächlichen Geschäft geändert werden. Es gibt keine sogenannte „Formel“. Das Design, das zu Ihrem tatsächlichen Geschäftsszenario passt, ist das Beste. Streben Sie daher nicht zu sehr nach „Optimierung“, denn das wird oft nach hinten losgehen. Schließlich ist es einfach nur Hooliganismus, über Technologie zu sprechen, ohne das Geschäft zu berücksichtigen. Okay, schauen wir uns die Situationen genauer an, in denen der Index fehlschlägt. (PS: Dieser Artikel ist im Grunde reine Theorie. Ich wollte ein Bild zeichnen, um es auszudrücken, aber ich habe festgestellt, dass ich überhaupt nicht anfangen konnte. Ich hoffe, jeder kann dabei bleiben. Es wird bald fertig sein.) Häufige Szenarien für Indexfehler
Vorausgesetzt, das Feld SELECT * FROM student WHERE Alter=15 Die obige Situation kann den Index verwenden, aber wenn Sie schreiben Wählen Sie * aus Schüler, wobei Alter = '15' ist. In diesem Fall kann der Index nicht verwendet werden, d. h. der Index Wenn die Feldkardinalität klein ist, kann es auch zu Indexfehlern kommen, wie im vorherigen Teil dieses Artikels ausführlich erläutert wurde. Die Ursache hierfür liegt im Weitere Prinzipien finden Sie in den Prinzipien der Indizierung und den Grundprinzipien der Abfrage. Ohne die vorherige Vorbereitung können diese etwas leer erscheinen. Lernen Sie daher bitte Schritt für Schritt den Index kennen. Dies ist im Grunde der Kern des Wissens, wenn wir Oben finden Sie den detaillierten Inhalt von „Was sind die Prinzipien Ihres Indexdesigns? Wie vermeide ich Indexfehler?“. Weitere Informationen zu den Prinzipien des Indexdesigns finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Confluence mit Docker bereitstellen
>>: 25 Beispiele für Website-Design im Nachrichtenstil
1. Front-End-geführte Implementierungsschritte De...
Frage Im vorherigen Artikel zur domänenübergreife...
Die schlechteste Option besteht darin, die Ergebn...
Inhaltsverzeichnis 1. Was ist ein Abschluss? 2. D...
1. Was ist Master-Slave-Replikation? Mithilfe der...
Wenn Sie beim Konfigurieren von proxy_pass in ngi...
Vorwort: Nachdem die Automatisierung geschrieben ...
Inhaltsverzeichnis Einführung in den NFS-Dienst W...
Inhaltsverzeichnis 1. Einführung in Gojs 2. Gojs ...
Hintergrund: Es gibt ein Flask-Projekt, das eine ...
Inhaltsverzeichnis 1. Einführung in die Grundfunk...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Grundtypen jeder Typ Arrays Tu...
Artikelstruktur 1. Vorbereitung 2. Installieren S...