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

Detailliertes Tutorial zur Installation und Konfiguration von Nginx unter Centos7

Hinweis: Der grundlegende Verzeichnispfad für die...

So installieren Sie MySQL 8.0.17 und konfigurieren den Fernzugriff

1. Vorbereitung vor der Installation Überprüfen S...

Detailliertes Tutorial zur Installation eines PXC-Clusters mit Docker

Inhaltsverzeichnis Vorwort Vorbereitende Vorberei...

Beispielcode zum Konvertieren des Mysql-Abfrageergebnissatzes in JSON-Daten

Mysql konvertiert Abfrageergebnissatz in JSON-Dat...

Mit CSS3 implementierter Gradienten-Folieneffekt

Ergebnisse erzielen Code html <div Klasse=&quo...

Detaillierte Erläuterung der MySQL-Partitionsfunktion und Beispielanalyse

Zunächst: Was ist Datenbankpartitionierung? Ich h...

Installationsschritte für das grafische MySQL-Verwaltungstool Navicat

Inhaltsverzeichnis Vorwort 1. Stellen Sie das Ins...

Konfiguration der primären Netzwerk-Portzuordnung für Docker

Portzuordnung Wenn vor dem Start des Docker-Conta...

So stellen Sie Kafka in Docker bereit

Inhaltsverzeichnis 1. Docker erstellen 2. Betrete...

mysql5.7 Installations- und Konfigurationstutorial unter Centos7.3

In diesem Artikel finden Sie das Installations- u...

Aggregatabfrage- und Union-Abfragevorgänge für MySQL-Datenbanken

Inhaltsverzeichnis 1. Einfügen der abgefragten Er...