Ich bin ein PHP-Entwickler, seien Sie also nicht streng. Ich habe einen großen Tisch ~ 5,5 GB Dump. Unser PM hat beschlossen, eine neue Spalte zu erstellen, um eine neue Funktion auszuführen. Tabelle ist InnoDB also was ich versucht habe:
Ändern Sie die Tabelle auf dem Bildschirm mit der Tabellensperre. Dauerte ~ 30 Stunden und nichts. Also habe ich einfach aufgehört. Zuerst habe ich einen Fehler gemacht, weil ich nicht alle Transaktionen beendet habe, aber das zweite Mal war kein Multilock. Status war
copy to tmp table
.Da ich auch die Partitionierung für diese Tabelle anwenden muss, beschließen wir, einen Speicherauszug zu erstellen, die Tabelle umzubenennen und mit demselben Namen und neuer Struktur zu erstellen. Aber Dump macht eine strenge Kopie (zumindest habe ich nichts anderes gefunden). Also habe ich hinzugefügt, um eine neue Spalte mit
sed
auszugeben und abzufragen. Aber einige seltsame Fehler begannen. Ich glaube, es wurde durch Zeichensatz verursacht. Tabelle in utf-8 und Datei wurde nach us-asciised
. Ich habe also Fehler (unbekannter Befehl '\' ') bei 30% der Daten erhalten. Das ist also auch ein schlechter Weg.
Was sind andere Optionen, um dies zu erreichen und die Leistung zu beschleunigen (ich kann es mit PHP-Skript tun, aber es wird ewig dauern). Was wird Leistung INSERT SELECT
in diesem Fall sein.
Vielen Dank für jeden Fortschritt.
SET NAMES utf8
undCOLLATION
.Aber meh idk, warum 30% der Daten danach beschädigtsed
. Ich denke, die Massenladung wird die schnellste sein, aber vielleicht gibt es noch etwas, das mir fehlt. Vielen Dank Mark