Wort Seit der ersten Version von MySQL 8.0 liegen nun vier Jahre vergangen. In der Version 8.0 wurden wesentliche Verbesserungen und Umbauten in Bezug auf Funktionen und Code vorgenommen. Nach Rücksprache mit Freunden im DBA-Kreis verwenden die meisten von ihnen immer noch die Versionen 5.6 und 5.7, und eine kleine Anzahl von ihnen hat MySQL 8.0 übernommen. Um mit der Geschwindigkeit der Datenbankentwicklung Schritt zu halten und die Vorteile der Technologie so schnell wie möglich zu nutzen, planen wir, MySQL 8.0 in das Datenbanksystem von Youzan einzuführen. Vor der Implementierung werden wir eine Reihe von Studien und Tests zu den neuen Features und Funktionen, Konfigurationsparametern, Upgrade-Methoden, Kompatibilität usw. von MySQL 8.0 durchführen. Weitere Artikel werden in Zukunft veröffentlicht. Dieser Artikel ist der erste, der die neuen Funktionen von MySQL 8.0 beschreibt. Lassen Sie uns über unsichtbare Indizes sprechen. Unsichtbarer Index Der unsichtbare Index bezieht sich auf den Optimierer. Bei der Analyse des Ausführungsplans (standardmäßig) ignoriert der Optimierer den Index mit dem gesetzten unsichtbaren Attribut.
Lassen Sie uns ohne weitere Umschweife ein paar Beispiele testen So legen Sie einen unsichtbaren Index fest Wir können die Sichtbarkeit des Indexes mit „create table“, „create index“ und „alter table“ mit den Schlüsselwörtern VISIBLE|INVISIBLE festlegen. mysql> Tabelle t1 erstellen (i int, > j int, > k Ganzzahl, > index i_idx (i) unsichtbar) engine=innodb; Abfrage OK, 0 Zeilen betroffen (0,41 Sek.) mysql> erstelle Index j_idx auf t1 (j) unsichtbar; Abfrage OK, 0 Zeilen betroffen (0,19 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 mysql> Tabelle ändern t1 Index k_idx (k) hinzufügen unsichtbar; Abfrage OK, 0 Zeilen betroffen (0,10 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 mysql> wähle index_name,is_visible aus information_schema.statistics, wobei table_schema='test' und table_name='t1'; +------------+------------+ | INDEX_NAME | IST_SICHTBAR | +------------+------------+ | i_idx | NEIN | | j_idx | NEIN | | k_idx | NEIN | +------------+------------+ 3 Zeilen im Satz (0,01 Sek.) mysql> Tabelle t1 ändern, Index i_idx sichtbar ändern; Abfrage OK, 0 Zeilen betroffen (0,06 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 mysql> wähle index_name,is_visible aus information_schema.statistics, wobei table_schema='test' und table_name='t1'; +------------+------------+ | INDEX_NAME | IST_SICHTBAR | +------------+------------+ | i_idx | JA | | j_idx | NEIN | | k_idx | NEIN | +------------+------------+ 3 Zeilen im Satz (0,00 Sek.) Die Rolle unsichtbarer Indizes Angesichts einer großen Anzahl historischer Indizes trauen sich DBAs nach mehreren Entwicklungsrunden und dem Austausch alter und neuer Entwickler wahrscheinlich nicht, die Indizes direkt zu löschen, insbesondere wenn sie auf große Tabellen mit mehr als 100 G stoßen. Das direkte Löschen des Index erhöht das Risiko der Datenbankstabilität. Mit der Funktion „Unsichtbarer Index“ kann der DBA den Index unsichtbar machen und gleichzeitig die langsamen Abfragedatensätze und den Thread-Ausführungsstatus der Datenbank beobachten. Wenn die Datenbank über einen längeren Zeitraum keine entsprechenden langsamen Abfragen aufweist und thread_running relativ stabil ist, kann der Index offline genommen werden. Andernfalls können Sie den Index schnell sichtbar machen und den Geschäftszugriff wiederherstellen.
Nach dem Festlegen des unsichtbaren Index kann der Ausführungsplan den Index nicht mehr verwenden mysql> anzeigen, Tabelle erstellen t2 \G *************************** 1. Reihe *************************** Tabelle: t2 Tabelle erstellen: CREATE TABLE `t2` ( `i` int NICHT NULL AUTO_INCREMENT, `j` int NICHT NULL, PRIMÄRSCHLÜSSEL (`i`), EINZIGARTIGER SCHLÜSSEL `j_idx` (`j`) /*!80000 UNSICHTBAR */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 Zeile im Satz (0,01 Sek.) mysql> einfügen in t2(j) Werte(1),(2),(3),(4),(5),(6),(7); Abfrage OK, 7 Zeilen betroffen (0,04 Sek.) Datensätze: 7 Duplikate: 0 Warnungen: 0 mysql> erklären select * from t2 where j=3\G *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: t2 Partitionen: NULL Typ: ALLE mögliche Schlüssel: NULL Schlüssel: NULL key_len: NULL Ref: NULL Reihen: 7 gefiltert: 14,29 Extra: Verwenden von „where“ 1 Zeile im Satz, 1 Warnung (0,01 Sek.) mysql> Tabelle t2 ändern, Index j_idx sichtbar ändern; Abfrage OK, 0 Zeilen betroffen (0,08 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 mysql> erklären select * from t2 where j=3\G *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: t2 Partitionen: NULL Typ: const mögliche Schlüssel: j_idx Schlüssel: j_idx Schlüssellänge: 4 Verweis: const Reihen: 1 gefiltert: 100,00 Extra: Index verwenden 1 Zeile im Satz, 1 Warnung (0,01 Sek.) Hinweise zur Verwendung unsichtbarer Indizes
Unsichtbare Indizes sind für Nicht-Primärschlüsselindizes. Der Primärschlüssel kann nicht auf unsichtbar gesetzt werden. Der Primärschlüssel umfasst hier explizite Primärschlüssel oder implizite Primärschlüssel (wenn kein Primärschlüssel vorhanden ist, wird er zum eindeutigen Index des Primärschlüssels hochgestuft). Wir können das folgende Beispiel verwenden, um diese Regel zu veranschaulichen. mysql> Tabelle t2 erstellen ( >i int nicht null, >j int nicht null, >eindeutiges j_idx (j) >) ENGINE = InnoDB; Abfrage OK, 0 Zeilen betroffen (0,16 Sek.) mysql> wähle index_name,is_visible aus information_schema.statistics, wobei table_schema='test' und table_name='t2'; +------------+------------+ | INDEX_NAME | IST_SICHTBAR | +------------+------------+ | j_idx | JA | +------------+------------+ 1 Zeile im Satz (0,00 Sek.) ### Wenn kein Primärschlüssel vorhanden ist, wird der eindeutige Schlüssel als impliziter Primärschlüssel behandelt und kann nicht auf unsichtbar gesetzt werden. mysql> Tabelle t2 ändern, Index j_idx unsichtbar ändern; FEHLER 3522 (HY000): Ein Primärschlüsselindex kann nicht unsichtbar sein MySQL> mysql> Tabelle ändern t2 Primärschlüssel hinzufügen (i); Abfrage OK, 0 Zeilen betroffen (0,44 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 mysql> wähle index_name,is_visible aus information_schema.statistics, wobei table_schema='test' und table_name='t2'; +------------+------------+ | INDEX_NAME | IST_SICHTBAR | +------------+------------+ | j_idx | JA | | GRUNDSCHULE | JA | +------------+------------+ 2 Zeilen im Satz (0,01 Sek.) mysql> Tabelle t2 ändern, Index j_idx unsichtbar ändern; Abfrage OK, 0 Zeilen betroffen (0,04 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 mysql> wähle index_name,is_visible aus information_schema.statistics, wobei table_schema='test' und table_name='t2'; +------------+------------+ | INDEX_NAME | IST_SICHTBAR | +------------+------------+ | j_idx | NEIN | | GRUNDSCHULE | JA | +------------+------------+ 2 Zeilen im Satz (0,01 Sek.) force /ignore index(index_name) Auf unsichtbare Indizes kann nicht zugegriffen werden, andernfalls wird ein Fehler gemeldet. mysql> wähle * von t2 aus, erzwinge Index(j_idx), wobei j=3; FEHLER 1176 (42000): Schlüssel „j_idx“ existiert nicht in Tabelle „t2“ Um einen Index unsichtbar zu machen, ist eine MDL-Sperre erforderlich, die bei langen Transaktionen zu Datenbank-Jitter führen kann. Der eindeutige Index ist auf unsichtbar eingestellt, was nicht bedeutet, dass die Eindeutigkeitsbeschränkung des Index selbst ungültig ist. mysql> wähle * aus t2; +---+----+ | ich | j | +---+----+ | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 4 | | 5 | 5 | | 6 | 6 | | 7 | 7 | | 8 | 11 | +---+----+ 8 Zeilen im Satz (0,00 Sek.) mysql> in t2(j) Werte einfügen(11); FEHLER 1062 (23000): Doppelter Eintrag „11“ für Schlüssel „t2.j_idx“ Zusammenfassung Eigentlich gibt es nicht viel zu sagen, ich wünsche Ihnen allen eine angenehme Nutzung. -Das Ende- Oben finden Sie eine ausführliche Erläuterung des unsichtbaren Index in MySQL 8.0. Weitere Informationen zum unsichtbaren Index in MySQL 8.0 finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So stellen Sie ein Vue-Projekt mit Docker-Image + nginx bereit
>>: Detaillierte Erklärung zu React Hooks
Im Webdesign hört man oft die Eigenschaftsnamen „...
Inhaltsverzeichnis Überblick 1. Einfaches Beispie...
Grundlegende Verwendung <!DOCTYPE html> <...
Inhaltsverzeichnis Date-Objekt Erstellen eines Da...
Wenn die Bilder des Servers von anderen Websites ...
In diesem Artikel wird der spezifische Code von V...
Nachfragehintergrund Das Projekt wurde mit Vue er...
20200804Nachtrag: Der Artikel könnte falsch sein....
Ursprüngliche Adresse: https://blog.csdn.net/m0_4...
Inhaltsverzeichnis Vorwort JavaScript find()-Meth...
Vorwort: Das am häufigsten verwendete logische My...
Heute ist mir plötzlich aufgefallen, dass die Stil...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis V-Modell .sync Der Unterschied...
In diesem Artikel werden hauptsächlich mehrere Pl...