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

Warum hat der Wechsel von utf8 zu utf8mb4 meine Datenbank verlangsamt?

utf ist wirklich utfmb3 und kann maximal 3 Bytes pro Zeichen verwenden, während utfmb4 4 Bytes pro Zeichen verwenden kann. Für VARCHAR-Spalten macht dies normalerweise keinen großen Unterschied, da MySQL nur so viele Bytes wie nötig speichert (es sei denn, Sie haben Ihre MyISAM-Tabellen mit ROW_FORMAT=FIXED erstellt).

Während der Abfrageausführung kann MySQL jedoch temporäre Tabellen in der MEMORY-Speicher-Engine erstellen, die Zeilen mit variabler Länge nicht unterstützt. Diese temporären Tabellen haben eine maximale Größe, und wenn diese Größe überschritten wird, werden die temporären Tabellen in Tabellen in MyISAM/InnoDB konvertiert (abhängig von Ihrer MySQL-Version). Die Statusvariable Created_tmp_disk_tables wird jedes Mal erhöht, wenn dies geschieht. Wenn ja, versuchen Sie zu sehen, ob es hilft, den Wert von max_heap_table_size zu erhöhen und tmp_table_size .

Alternativ können Sie auf MySQL 8.0 aktualisieren, wo eine neue Speicher-Engine, die Zeilen mit variabler Länge unterstützt, für interne temporäre Tabellen verwendet wird.