So fügen Sie in MySQL 8.0 schnell Spalten hinzu

So fügen Sie in MySQL 8.0 schnell Spalten hinzu

Vorwort:

Ich habe vor langer Zeit gehört, dass MySQL 8.0 das schnelle Hinzufügen von Spalten unterstützt, wodurch Felder in Sekundenschnelle zu großen Tabellen hinzugefügt werden können. Der Autor verfügt auch lokal über eine 8.0-Umgebung, hat diese jedoch nicht getestet. Sehen wir uns in diesem Artikel an, wie Sie in MySQL 8.0 schnell Spalten hinzufügen.

1. Verstehen Sie die Hintergrundinformationen

Das Ändern der Tabellenstruktur ist eine der häufigsten Anforderungen im Geschäftsbetriebsprozess. In der MySQL-Umgebung können Sie die ALTER-Anweisung verwenden, um diese Vorgänge abzuschließen. Die Vorgänge, die diesen ALTER-Anweisungen entsprechen, werden normalerweise auch als DDL-Vorgänge bezeichnet. Im Allgemeinen wirken sich DDL-Operationen an großen Tabellen erheblich auf das Geschäft aus und müssen ausgeführt werden, wenn das Geschäft inaktiv ist oder während Wartungsarbeiten. MySQL 5.7 unterstützt Online-DDL. Die meisten DDLs wirken sich nicht auf das Lesen und Schreiben von Tabellen aus, verbrauchen jedoch dennoch viel Zeit, belegen zusätzlichen Speicherplatz und verursachen Master-Slave-Verzögerungen. Aus diesem Grund bereitet DDL mit großen Tabellen DBAs immer noch Kopfzerbrechen.

Ich habe gehört, dass MySQL 8.0 dieses Problem für Datenbankadministratoren löst. Schauen wir uns das also genauer an. Der einfachste Weg, sich über neue Funktionen zu informieren, besteht darin, die offizielle Dokumentation zu konsultieren. Laut der offiziellen Dokumentation wurde die Funktion „Instant Add Column“ in MySQL 8.0.12 eingeführt und vom DBA-Team von Tencent Games beigesteuert. Beachten Sie, dass diese Funktion nur für InnoDB-Tabellen verfügbar ist.

2. Schneller Säulenadditionstest

Beim schnellen Hinzufügen von Spalten wird ein Sofortalgorithmus verwendet, sodass beim Hinzufügen einer Spalte nicht die gesamte Tabelle neu erstellt werden muss. Sie müssen nur die grundlegenden Informationen der neuen Spalte in den Tabellenmetadaten aufzeichnen. Das Hinzufügen von ALGORITHM=INSTANT nach der Alter-Anweisung bedeutet, dass der Instant-Algorithmus verwendet wird. Wenn es nicht explizit angegeben ist, werden standardmäßig Operationen verwendet, die den Instant-Algorithmus unterstützen. Wenn ALGORITHM=INSTANT angegeben ist, aber nicht unterstützt wird, schlägt der Vorgang sofort mit einem Fehler fehl.

Bezüglich der DDL-Operation von Spalten, ob Algorithmen wie Instant unterstützt werden, stellt das offizielle Dokument eine Tabelle bereit, die nun wie folgt organisiert ist. Sternchen zeigen an, dass nicht alle unterstützt werden und Abhängigkeiten bestehen.

arbeiten Sofortig An Ort und Stelle Tabelle neu erstellen Gleichzeitiges DML zulassen Nur Metadaten ändern
Spalten hinzufügen Ja* Ja NEIN* Ja* NEIN
Löschen einer Spalte NEIN Ja Ja Ja NEIN
Spalten umbenennen NEIN Ja NEIN Ja* Ja
Spaltenreihenfolge ändern NEIN Ja Ja Ja NEIN
Festlegen von Spaltenstandardwerten Ja Ja NEIN Ja Ja
Ändern der Spaltendatentypen NEIN NEIN Ja NEIN NEIN
Erweitern der VARCHAR-Spaltengröße NEIN Ja NEIN Ja Ja
Spaltenstandardwert entfernen Ja Ja NEIN Ja Ja
Ändern des Auto-Increment-Werts NEIN Ja NEIN Ja NEIN*
Setzen Sie die Spalte auf Null NEIN Ja Ja* Ja NEIN
Setzen Sie die Spalte auf unnull NEIN Ja* Ja* Ja NEIN
Ändern Sie die Definition der ENUM/SET-Spalte Ja Ja NEIN Ja Ja

Der am häufigsten verwendete Sofortalgorithmus ist das Hinzufügen von Spalten. Wie Sie sehen, gibt es bei der Verwendung dieses Algorithmus einige Einschränkungen. Einige der Einschränkungen sind wie folgt:

  • Wenn die ALTER-Anweisung das Hinzufügen von Spalten und andere Operationen enthält und eine der Operationen den Instant-Algorithmus nicht unterstützt, meldet die ALTER-Anweisung einen Fehler und alle Operationen werden nicht ausgeführt.
  • Spalten können nur sequenziell hinzugefügt werden. Das Hinzufügen von Spalten unterstützt nur das Hinzufügen von Spalten am Ende, nicht jedoch das Hinzufügen von Spalten in der Mitte vorhandener Spalten.
  • Komprimierte Tabellen werden nicht unterstützt, d. h. das Tabellenzeilenformat kann nicht KOMPRIMIERT werden.
  • Tabellen mit Volltextindizes werden nicht unterstützt.
  • Temporäre Tabellen werden nicht unterstützt.
  • In Datenwörterbuch-Tabellenbereichen erstellte Tabellen werden nicht unterstützt.

Es ist besser, es in der Praxis zu testen, als mehr zu sagen. Nehmen wir die Version 8.0.19 als Beispiel, um es in der Praxis zu überprüfen:

# Verwenden Sie Sysbench, um eine 10-Millionen-Watt-Tabelle zu generierenmysql> select version();
+-------------+
| version() |
+-------------+
| 8.0.19 |
+-------------+
1 Zeile im Satz (0,00 Sek.)

mysql> wähle count(*) aus sbtest1;
+----------+
| Anzahl(*) |
+----------+
| 10000000 |
+----------+

# Fügen Sie eine Spalte ohne Standardwert hinzumysql> alter table sbtest1 add column col1 varchar(20), algorithm=instant;
Abfrage OK, 0 Zeilen betroffen (0,63 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

# Fügen Sie eine Spalte mit einem Standardwert hinzu mysql> alter table sbtest1 add column create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Erstellungszeit', Algorithmus=sofort;
Abfrage OK, 0 Zeilen betroffen (0,58 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

# Geben Sie den Instant-Algorithmus nicht explizit an mysql> alter table sbtest1 add column col2 varchar(20);
Abfrage OK, 0 Zeilen betroffen (0,55 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

# Legen Sie den Standardwert der Spalte mysql> alter table sbtest1 alter column col1 set default 'sql',algorithm=instant; fest.
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

# Geben Sie den In-Place-Algorithmus zum Hinzufügen von Spalten an (dieser Algorithmus wird in Version 5.7 verwendet)
mysql> Tabelle ändern sbtest1 Spalte hinzufügen col_inplace varchar(20), Algorithmus=inplace;
Abfrage OK, 0 Zeilen betroffen (1 Min. 23,30 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

Durch die obigen Tests können wir feststellen, dass das Hinzufügen von Spalten mithilfe des Instant-Algorithmus grundsätzlich innerhalb von 1 Sekunde abgeschlossen ist. Bei großen Tabellen ist diese Geschwindigkeit sehr hoch und das Unternehmen ist sich dessen grundsätzlich nicht bewusst. Bei Verwendung des Inplace-Algorithmus in Version 5.7 erhöht sich die Zeit zum Hinzufügen einer Spalte auf mehrere Minuten. Im Vergleich dazu ist die Funktion zum schnellen Hinzufügen von Spalten der Version 8.0 tatsächlich sehr praktisch!

Zusammenfassen:

Obwohl es einige Einschränkungen beim schnellen Hinzufügen von Spalten gibt und der Sofortalgorithmus nur auf einige DDL-Operationen anwendbar ist, ist diese neue Funktion von 8.0 spannend genug und löst weitgehend das Problem des Hinzufügens von Feldern zu großen Tabellen. Ich hoffe, dass Sie durch diesen Artikel diese neue Funktion verstehen können. Wenn Sie auf 8.0 aktualisieren möchten, können Sie damit beginnen, dies genau zu tun.

Oben finden Sie Einzelheiten zum schnellen Hinzufügen von Spalten in MySQL 8.0. Weitere Informationen zum schnellen Hinzufügen von Spalten in MySQL 8.0 finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung zur Verwendung von MySQL Online DDL
  • So beheben Sie die durch MySQL DDL verursachte Synchronisierungsverzögerung
  • Detaillierte Erklärung der atomaren DDL-Syntax von MySQL 8.0
  • MySQL Online-DDL-Tool Gh-Ost-Prinzipanalyse
  • Verwendung von MySQL DDL-Anweisungen
  • Zusammenfassung gängiger MySQL-DDL-Operationen
  • Analyse der neuen Funktionen von MySQL 8.0 - Transaktionales Datenwörterbuch und Atomic DDL
  • Grundlegende Anweisungen der MySQL-Datendefinitionssprache DDL
  • MySQL 8.0 DDL-Atomaritätsfunktion und Implementierungsprinzip
  • Zusammenfassung der Verwendung von MySQL Online DDL gh-ost
  • Lösen Sie das Problem der blockierenden Positionierungs-DDL in MySQL 5.7
  • Neue Funktionen in MySQL 8.0: Unterstützung für atomare DDL-Anweisungen
  • MySQL weist eine Riddle-Sicherheitslücke auf, die zum Verlust von Benutzernamen und Passwörtern führen kann
  • Zusammenfassung der schnellen Spaltenaddition bei MySQL 8.0 Online DDL

<<:  Über die Probleme von Kongruenz und Ungleichheit, Gleichheit und Ungleichheit in JS

>>:  Darstellung des Vorgangs zur Verwendung von FileZilla zur Verbindung mit dem FTP-Server

Artikel empfehlen

JS+Canvas zeichnet ein Glücksrad

In diesem Artikel wird der spezifische Code der J...

Javascript um den Drag-Effekt der Login-Box zu erreichen

In diesem Artikel wird der spezifische Code von J...

Stimmt es, dass der Webdesign-Stil umso besser ist, je einfacher er ist?

Ursprüngliche Adresse: http://www.webdesignfromsc...

Gründe, warum MySQL-Abfragen langsam sind

Inhaltsverzeichnis 1. Wo ist die Langsamkeit? 2. ...

Beispiele für die Verwendung von Docker und Docker-Compose

Docker ist eine Open-Source-Container-Engine, mit...

Webdesign: Implementierungstechniken für Webmusik

<br />Wenn Sie Musik in eine Webseite einfüg...