2012-06-12 9 views
8

Ich möchte auf meinem Tisch laufen:Ändern des Datentyps einer Spalte in einer HUGE-Tabelle. Performance-Probleme

ALTER TABLE table_name MODIFY col_name VARCHAR(255) 

Aber mein Tisch ist riesig, es hat mehr als 65 Millionen (65 Millionen) Zeilen. Jetzt, wenn ich es ausführe, dauert es fast 50 Minuten, um diesen Befehl auszuführen. Gibt es einen besseren Weg, den Tisch zu verändern?

+4

Nein, es geht langsam sein zu verwenden. Eine ALTER-Anweisung ist eine einmalige Aktion. Warte es ab und hoffe, dass du es nicht noch einmal tun musst. –

+3

Riesiger Tisch? Nein. Sehr groß? Ja. –

Antwort

3

Nun, Sie brauchen

ALTER TABLE table_name CHANGE col_name new_name VARCHAR(255) 

Aber Sie haben Recht, es dauert eine Weile, um die Änderung vorzunehmen. Es gibt wirklich keinen schnelleren Weg, die Tabelle in MySQL zu ändern.

Haben Sie während der Umstellung Ausfallzeiten? Wenn ja, ist hier ein möglicher Ansatz: Kopieren Sie die Tabelle in eine neue, ändern Sie dann den Spaltennamen in der Kopie und benennen Sie die Kopie um.

Sie haben wahrscheinlich herausgefunden, dass das routinemäßige Ändern von Spaltennamen in Tabellen in einem Produktionssystem keine gute Idee ist.

+0

Ja. Ich kann es mir nicht leisten, Ausfallzeiten von 50 Minuten zu haben, da alle Zeilen währenddessen gesperrt werden, was andere Aktionen (CRUD) in dieser Tabelle verhindert. – Kiran

+0

Uh. Oh. Das bedeutet, wenn Sie die Tabelle kopieren, werden neue und geänderte Zeilen in der alten Tabelle angezeigt, während Sie die neue Tabelle neu organisieren. Wenn dies mein Projekt wäre, würde ich jetzt versuchen zu entscheiden, wie wichtig es ist, diesen Spaltennamen zu ändern. –

+0

ja. Ich kann eine Sache machen. Verkünden Sie die Ausfallzeit von 1 Stunde und ändern Sie diese, wenn die Belastung geringer ist. Wahrscheinlich um Mitternacht. Vielen Dank für Ihre Eingaben. – Kiran

0

Mit Oak können Sie den Schemawechsel ohne Ausfallzeiten durchführen.

oak-online-alter-table kopiert Schema der ursprünglichen Tabelle, wendet Ihre Änderungen an und kopiert dann die Daten. Die CRUD-Operationen können weiterhin aufgerufen werden, da oak einige Trigger auf die Originaltabelle setzt, so dass während der Operation keine Daten verloren gehen.

Bitte beziehen Sie sich auf other question, wo Autor von Eiche detaillierte Erklärung über diesen Mechanismus gibt und schlägt auch andere Werkzeuge vor.

Verwandte Themen