Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zeilengröße zu groß (> 8126) kann ich InnoDB einfach in MyISAM ändern

Ja, Sie könnten zu MyISAM wechseln. Aber das ist nicht unbedingt eine gute Idee:

  • MyISAM unterstützt keine Transaktionen
  • MyISAM-Tabellen benötigen oft REPAIR nach einem Absturz

Eine InnoDB-Tabelle kann mehr als 8 KB pro Zeile verarbeiten. Anscheinend sind Sie auf das Problem gestoßen, weil Sie ein Dutzend oder mehr TEXT/BLOB-Spalten haben? Im Hauptteil der Zeile werden höchstens 767 Byte einer Spalte gespeichert; der Rest wird in einen separaten Block gestellt.

Ich denke, ein ROW_FORMAT wird alle großen Spalten in einen separaten Block stellen und nur 20 Bytes zurücklassen, um darauf zu zeigen.

Ein weiterer Ansatz für breite Zeilen ist die "vertikale Partitionierung". Das heißt, erstellen Sie eine weitere Tabelle (oder Tabellen) mit einem passenden PRIMARY KEY und einige der großen Säulen. Es ist besonders praktisch, spärlich gefüllte Spalten in eine solche Tabelle zu verschieben, dann weniger Zeilen in dieser Tabelle zu haben und LEFT JOIN zu verwenden um die Daten zu holen. Auch wenn Sie einige Spalten haben, die Sie selten SELECT benötigen , dann sind das gute Kandidaten zum Verschieben – kein JOIN erforderlich, wenn Sie diese Spalten nicht benötigen.