Dieser Artikel fasst die Wissenspunkte zu MySql-Indizes, -Sperren und -Transaktionen zusammen. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: 1. InhaltsverzeichnisEin Index ist vergleichbar mit dem Inhaltsverzeichnis eines Buches und Sie können anhand einer Seitenzahl im Inhaltsverzeichnis sofort den entsprechenden Datensatz finden. Vorteile der Indizierung:
Nachteile der Indizierung:
In Bezug auf die Implementierung werden Indizes in zwei Typen unterteilt: Cluster-Indizes und Hilfsindizes (auch Sekundärindizes oder Nicht-Cluster-Indizes genannt). Funktional gibt es sechs Typen: Normalindex, eindeutiger Index, Primärschlüsselindex, zusammengesetzter Index, Fremdschlüsselindex und Volltextindex. Lassen Sie uns die 6 Indextypen im Detail besprechen:
Darüber hinaus clustert InnoDB Daten nach Primärschlüssel. Wenn kein Primärschlüssel und kein Clustered-Index definiert sind, wählt MySql stattdessen einen eindeutigen, nicht leeren Index aus. Wenn kein solcher Index vorhanden ist, wird implizit ein 6-Byte-Primärschlüssel als Clustered-Index definiert, der von Benutzern weder angezeigt noch aufgerufen werden kann. Um es einfach auszudrücken:
MySql speichert Daten in Seiten und die Standardseitengröße beträgt 16 KB. Bei einer Abfrage wird nicht nur ein bestimmtes Datenelement geladen, sondern alle Seiten, auf denen sich die Daten befinden, werden in den Seitencache geladen. Dies ähnelt tatsächlich dem Prinzip des nahen Zugriffs des Betriebssystems. Der Index von MySql verwendet eine B+-Baumstruktur. Bevor wir über den B+-Baum sprechen, wollen wir zuerst über den B-Baum sprechen. Der B-Baum ist ein mehrseitiger, ausgeglichener Suchbaum. Im Vergleich zu einem gewöhnlichen Binärbaum ist er nicht extrem unausgewogen und auch mehrseitig. Die Besonderheit von B-Tree besteht darin, dass Daten auch in untergeordneten Knoten gespeichert werden, die keine Seiten sind. Wie Sie auf dem Bild sehen können: Diese Funktion bedeutet, dass nicht seitenbezogene untergeordnete Knoten keine große Anzahl von Indizes speichern können. Der B+-Baum optimiert den B-Baum für diesen Zweck. Wie in der folgenden Abbildung dargestellt: Wir können sehen, dass der B+-Baum alle Daten in Blattknoten speichert und nicht untergeordnete Knoten nur Indizes und Zeiger speichern. Wir gehen davon aus, dass ein nicht seitenbezogener untergeordneter Knoten 16 KB groß ist, jeder Index, d. h. der Primärschlüssel, Bigint, also 8b, ist und der Zeiger 8b ist. Dann kann jede Seite etwa 1000 Indizes speichern (16 KB/8 B + 8 B). Wie viele Indizes kann ein 3-Schicht-B+-Baum speichern? Wie unten dargestellt: Möglichkeit zur Speicherung von ca. 1 Milliarde Indizes. Normalerweise beträgt die Höhe eines B+-Baums 2-4 Ebenen. Da der Stammknoten bei Ausführung von MySQL im Speicher resident ist, erfordert jede Suche nur etwa 2-3 IOs. Man kann sagen, dass das Design des B+-Baums auf den Eigenschaften mechanischer Festplatten basiert. Wenn wir den Aufbau des Index kennen, können wir einige weitere Informationen erfahren:
Wenn also Sharding im Projekt verwendet wird, benötigen wir normalerweise einen Primärschlüssel für das Sharding. Was also sollen wir tun? In Bezug auf die Implementierung können wir den automatisch inkrementierten Primärschlüssel beibehalten und den logischen Primärschlüssel als eindeutigen Index verwenden. 2. VerriegelungsmechanismusWenn es um MySQL-Sperren geht, tauchen verschiedene Konzepte auf. Tatsächlich haben Sperren mehrere Dimensionen. Lassen Sie es uns erklären. 1. Typdimension
Typenaufschlüsselung:
2. Sperrgranularität (Granularitätsdimension)
3. Sperralgorithmus (Algorithmusdimension)
4. Ist der Lesevorgang standardmäßig gesperrt?
Sie können die Sperre manuell wählen: Wählen Sie xxxx zum Aktualisieren (exklusive Sperre); wählen Sie die xxxx-Sperre im Freigabemodus (gemeinsame Sperre), was als „konsistentes Sperrlesen“ bezeichnet wird. Nach der Verwendung der Sperre können Phantom-Lesevorgänge auf RR-Ebene vermieden werden. Natürlich kann das standardmäßige MVCC-Lesen auch Phantom-Lesevorgänge vermeiden. Da RR Phantom-Lesevorgänge verhindern kann, was ist der Nutzen von SERIALIZABLE? Verhindern Sie verlorene Updates. Beispielsweise die folgende Abbildung: Zu diesem Zeitpunkt müssen wir die Ebene SERIALIZABLE zum seriellen Lesen verwenden. Schließlich besteht das Implementierungsprinzip der Zeilensperre darin, den Clusterindex zu sperren. Wenn Sie den Index bei der Abfrage nicht richtig treffen, gibt der MySQL-Optimierer die Zeilensperre auf und verwendet die Tabellensperre. 3. TransaktionenTransaktionen sind ein ewiges Thema in Datenbanken, ACID: Atomarität, Konsistenz, Isolation und Persistenz. Von den vier Eigenschaften ist Konsistenz die wichtigste. Konsistenz wird durch Atomarität, Isolation und Persistenz gewährleistet.
Dann reden wir über Isolation. Isolationsstufe:
Jede Ebene löst unterschiedliche Probleme, normalerweise drei Probleme: Dirty Reads, nicht wiederholbare Reads und Phantom Reads. Ein klassisches Bild: Hier ist ein Punkt, der zu Phantom-Lesevorgängen zu beachten ist. In der Datenbankspezifikation verursacht die RR-Ebene Phantom-Lesevorgänge. Aufgrund der MySQL-Optimierung verursacht die RR-Ebene von MySQL jedoch keine Phantom-Lesevorgänge: Bei Verwendung der Standardauswahl verwendet MySQL den MVCC-Mechanismus, um sicherzustellen, dass keine Phantom-Lesevorgänge stattfinden; Sie können auch Sperren verwenden. Bei Verwendung von Sperren, z. B. für Updates (X-Sperre) oder Sperren im Freigabemodus (S-Sperre), verwendet MySQL die Next-Key-Sperre, um sicherzustellen, dass keine Phantom-Lesevorgänge stattfinden. Ersteres wird als Snapshot-Lesen bezeichnet, letzteres als aktuelles Lesen. Prinzipanalyse:
Was ist also der Unterschied zwischen RR und Serializble? A: Updates verloren. Der Schlossteil dieses Artikels wurde erwähnt. MVCC-Einführung: Der vollständige Name lautet „Multi-Version Concurrency Control“. Jeder gruppierte Index von innoDB verfügt über 4 versteckte Felder, nämlich den Primärschlüssel (RowID), die Transaktions-ID der letzten Änderung (MVCC-Kern), den Zeiger des Undo-Protokolls (Isolationskern) und die Index-Löschmarkierung (beim Löschen wird es nicht sofort gelöscht, sondern markiert und dann asynchron gelöscht); Im Wesentlichen wird MVCC mithilfe der verknüpften Undo-Log-Liste implementiert. MVCC-Implementierungsmethode: Die Transaktion ändert die Originaldaten in einer exklusiven Sperre, speichert die Daten vor der Änderung im Undo-Protokoll und verknüpft die Daten mit dem Rollback-Zeiger. Wenn die Änderung erfolgreich ist, wird nichts unternommen. Wenn die Änderung fehlschlägt, werden die Daten im Undo-Protokoll wiederhergestellt. Noch etwas: Normalerweise denken wir, dass MVCC dem optimistischen Sperren ähnelt, also Versionsnummern verwendet, aber tatsächlich ist InnoDB nicht auf diese Weise implementiert. Unsere Nutzung von MySql wird hierdurch selbstverständlich nicht beeinträchtigt. 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:
|
<<: Einen Web-Rechner mit Javascript schreiben
>>: Öffentliche kostenlose STUN-Server
So zentrieren Sie ein Element im Browserfenster H...
In diesem Artikel wird hauptsächlich die Bereitst...
Ich habe meiner persönlichen Website vor Kurzem e...
1. Konfigurieren Sie die lokale Yum-Quelle 1. Mou...
Heute möchte ich einen Countdown von Vue und Mome...
Projektszenario: Beim Ausführen des Vue-Projekts ...
Inhaltsverzeichnis 1. Gojs-Implementierung 1. Zei...
Ich nenne diese Art von Fehler einen typischen „H...
1. Reverse-Proxy-Beispiel 1 1. Erzielen Sie den E...
1. Befehlsmethode Führen Sie den Nginx-Dienst im ...
Die verwendete virtuelle Maschine ist CentOS 8.4,...
Erkennen Sie die Unterschiede zwischen den Method...
Die Rewrite-Funktion von Nginx unterstützt regelm...
Einführung in Rahmeneigenschaften border -Eigensc...
Inhaltsverzeichnis Vorwort Erster Blick auf React...