2016-12-09 3 views

Antwort

3

Einige MySQL-Abfragen erstellen internal temporary tables, um Teilergebnisse zu speichern.

Ab MySQL 5.7.6 ist die Standard-Speicher-Engine für interne temporäre Tabellen InnoDB, die eine ziemlich kleine Grenze für die Zeilengröße hat, wie Sie sehen können (obwohl BLOB/TEXT-Spalten diese Grenze überschreiten können).

Sie können wieder auf die alte pre-5.7 Standard-Speicher-Engine für die interne temporäre Tabellen gehen:

internal_tmp_disk_storage_engine=MyISAM 

Dies ist die Problemumgehung in diesem Bug erwähnt: "Bug #77398 row size too large in mysql 5.7 query"

1

zeigen Sie uns bitte SHOW CREATE TABLE. Ich wette, Sie haben viele Spalten VARCHAR(255) deklariert. Ich wette auch, dass die meisten dieser Spalten nie 255 Zeichen benötigen. Schrumpfe sie.

Wenn das nicht ausreicht, ändern Sie einen ein paar zu TEXT; Die Daten werden außerhalb der Seite gespeichert und haben keine Auswirkungen auf das 8K-Limit.

Wenn das nicht ausreicht, können wir über "vertikale Partitionierung" sprechen. Zeigen Sie an diesem Punkt die Abfrage, die den Fehler ausgelöst hat. Wenn Sie SELECT * tun, ändern Sie es, um nur die Spalten anzugeben, die Sie wirklich benötigen.

Verwenden Sie MyISAM nicht, das ist ein Schritt zurück. Und es wird in der nächsten Version weggehen, also wird eine zukünftige Migration verletzt werden.

Verwandte Themen