Vorwort Die neueste Version von MySQL 8.0 ist 8.0.4 rc und die offizielle Version wird voraussichtlich bald veröffentlicht. Dieser Artikel stellt mehrere wichtige neue Funktionen von 8.0 in relationalen Datenbanken vor. Sie wissen vielleicht bereits, dass MySQL seit Version 5.7 NoSQL-Speicherfunktionen bietet, und diese Funktion wurde auch in 8.0 verbessert. Da dies in der Praxis jedoch selten verwendet wird und ich es nie verwendet habe, wird dieser Artikel diesen Aspekt nicht vorstellen, sondern sich auf den relationalen Datenbankaspekt konzentrieren. 1. Versteckter Index Die Funktion für versteckte Indizes ist für die Leistungsfehlerbehebung sehr nützlich. In 8.0 können Indizes „ausgeblendet“ und „angezeigt“ werden. Wenn ein Index ausgeblendet ist, wird er vom Abfrageoptimierer nicht verwendet. Das heißt, wir können einen Index ausblenden und dann die Auswirkungen auf die Datenbank beobachten. Wenn die Datenbankleistung nachgelassen hat, bedeutet dies, dass der Index nützlich ist und Sie ihn „zur Anzeige wiederherstellen“ können. Wenn sich die Datenbankleistung nicht geändert hat, bedeutet dies, dass der Index redundant ist und gelöscht werden kann. Die Syntax zum Ausblenden eines Indexes lautet: ALTER TABLE t ALTER INDEX i UNSICHTBAR; Die Syntax zum Wiederherstellen des Indexes lautet: ALTER TABLE t ALTER INDEX i SICHTBAR; Wenn ein Index ausgeblendet ist, können wir aus der Ausgabe des Befehls „show index“ erkennen, dass der Sichtbar-Eigenschaftswert des Indexes „NO“ lautet. Hinweis: Wenn ein Index ausgeblendet ist, wird sein Inhalt trotzdem wie bei einem normalen Index in Echtzeit aktualisiert. Diese Funktion dient speziell der Optimierung und Fehlerbehebung. Wenn Sie einen Index längere Zeit ausblenden, ist es besser, ihn zu löschen, da die Existenz des Indexes letztendlich die Leistung beim Einfügen, Aktualisieren und Löschen beeinträchtigt. 2. Persistenz festlegen MySQL-Einstellungen können zur Laufzeit mit dem Befehl SET GLOBAL geändert werden, diese Änderung ist jedoch nur temporär und die Datenbank liest die Konfigurationsdatei beim nächsten Start erneut. MySQL 8 fügt den Befehl SET PERSIST hinzu, zum Beispiel: SETZEN SIE PERSIST max_verbindungen = 500; MySQL speichert die Konfiguration dieses Befehls in der Datei mysqld-auto.cnf im Datenverzeichnis. Beim nächsten Start liest MySQL die Datei und überschreibt mit der darin enthaltenen Konfiguration die Standardkonfigurationsdatei. 3. UTF-8-Kodierung Ab MySQL 8 wird die Standardkodierung der Datenbank auf utf8mb4 geändert, was alle Emoji-Zeichen einschließt. Viele Jahre lang waren wir bei der Kodierung bei der Verwendung von MySQL sehr vorsichtig, aus Angst, wir könnten vergessen, das lateinische Standardformat zu ändern und dadurch verstümmelte Zeichen entstehen. Ab sofort müssen Sie sich darüber keine Gedanken mehr machen. 4. Allgemeine Tabellenausdrücke Komplexe Abfragen verwenden eingebettete Tabellen, zum Beispiel: WÄHLEN Sie t1.*, t2.* VON (WÄHLEN Sie Spalte1 aus Tabelle1) t1, (WÄHLEN Sie Spalte2 aus Tabelle2) t2; Mit CTE können wir schreiben: MIT t1 ALS (SELECT col1 FROM table1), t2 AS (WÄHLEN Sie Spalte2 AUS Tabelle2) WÄHLEN Sie t1.*, t2.* VON t1, t2; Auf diese Weise werden die Ebenen und Bereiche klarer dargestellt und Sie wissen genauer, welcher Teil geändert werden muss. Ausführlichere Informationen zu CTE finden Sie in der offiziellen Dokumentation. 5. Fensterfunktionen Eines der am häufigsten bemängelten Features von MySQL ist das Fehlen einer rank()-Funktion. Wenn Sie in einer Abfrage ein Ranking implementieren müssen, müssen Sie die @-Variable manuell schreiben. Ab 8.0 wurde MySQL jedoch ein neues Konzept namens Fensterfunktion hinzugefügt, mit dem mehrere neue Abfragemethoden implementiert werden können. Fensterfunktionen ähneln ein wenig Aggregatfunktionen wie SUM() und COUNT(), sie fassen jedoch nicht mehrere Zeilen mit Abfrageergebnissen in einer Zeile zusammen, sondern ordnen die Ergebnisse wieder in mehreren Zeilen zu. Mit anderen Worten: Fensterfunktionen erfordern kein GROUP BY. Angenommen, wir haben eine Tabelle mit der „Anzahl der Schüler in einer Klasse“: mysql> wähle * aus Klassen; +--------+-----------+ | Name | Anzahl der Stu-Anzahl | +--------+-----------+ | Klasse 1 | 41 | | Klasse 2 | 43 | | Klasse 3 | 57 | | Klasse 4 | 57 | | Klasse 5 | 37 | +--------+-----------+ 5 Zeilen im Satz (0,00 Sek.) Wenn ich die Klassengröße von klein nach groß einstufen möchte, kann ich die Fensterfunktion wie folgt verwenden: mysql> select *, rank() über war `rank` aus Klassen -> Fenster war (Sortierung nach stu_count); +--------+-----------+------+ | Name | stu_count | Rang | +--------+-----------+------+ | Klasse 5 | 37 | 1 | | Klasse 1 | 41 | 2 | | Klasse 2 | 43 | 3 | | Klasse 3 | 57 | 4 | | Klasse 4 | 57 | 4 | +--------+-----------+------+ 5 Zeilen im Satz (0,00 Sek.) Hier erstellen wir ein Fenster mit dem Namen w, geben es zum Sortieren des Felds stu_count an, führen dann die Methode rank() für w in der Select-Klausel aus und geben das Ergebnis als Rangfeld aus. Tatsächlich ist die Erstellung eines Fensters optional. Wenn ich beispielsweise die Gesamtzahl der Studierenden in jeder Zeile hinzufügen möchte, kann ich Folgendes tun: mysql> wähle *, Summe(stu_count) über() als total_count -> aus Klassen; +--------+-----------+-------------+ | Name | stu_count | Gesamtanzahl | +--------+-----------+-------------+ | Klasse 1 | 41 | 235 | | Klasse 2 | 43 | 235 | | Klasse 3 | 57 | 235 | | Klasse 4 | 57 | 235 | | Klasse 5 | 37 | 235 | +--------+-----------+-------------+ 5 Zeilen im Satz (0,00 Sek.) Welchen Sinn hat das? Auf diese Weise können wir den Anteil der Schüler in jeder Klasse gleichzeitig ermitteln: mysql> wähle *, -> (stu_count)/(Summe(stu_count) über()) als Rate -> aus Klassen; +--------+-----------+--------+ | Name | stu_count | Bewertung | +--------+-----------+--------+ | Klasse 1 | 41 | 0,1745 | | Klasse 2 | 43 | 0,1830 | | Klasse 3 | 57 | 0,2426 | | Klasse 4 | 57 | 0,2426 | | Klasse 5 | 37 | 0,1574 | +--------+-----------+--------+ 5 Zeilen im Satz (0,00 Sek.) In der Vergangenheit konnte dies nur durch das Schreiben eines langen und undurchsichtigen Absatzes erreicht werden! Weitere Informationen zu Fensterfunktionen finden Sie hier. Wie wäre es? Haben Sie nach dem Lesen der obigen Einführung weitere Erwartungen an MySQL 8.0? 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. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
>>: So löschen Sie den gesamten Inhalt eines Verzeichnisses mit Ansible
Inhaltsverzeichnis 1. Bedienelemente 1.1. Element...
Machen Sie sich keine Sorgen, wenn Sie das Wagenr...
Zusammenfassen 1. Ähnlichkeiten Beide können den ...
Dieser Artikel entstand aus meinen Beschwerden üb...
Ich habe kürzlich an einem Framework gearbeitet, ...
Dieser Artikel soll vor allem Anfängern einige gr...
Flash-Dateiformate: .FLV und .SWF Für das Flash-Vi...
Zuerst ist die Idee Um diesen Effekt zu erzielen,...
CAST-Funktion Im vorherigen Artikel haben wir die...
Das Feld im JSON-Format ist ein neues Attribut, d...
Inhaltsverzeichnis Vorwort Ziel Erster Schritt: S...
Viele Menschen leben heute im Internet und die Suc...
1. Konzept Sie alle sind Attribute des Elements u...
Umfeld Linux 3.10.0-693.el7.x86_64 Docker-Version...
Nehmen Sie als Beispiel die Installation von MySQ...