Mysql
 sql >> Database >  >> RDS >> Mysql

Perché il passaggio da utf8 a utf8mb4 ha rallentato il mio database?

utf è davvero utfmb3 e può utilizzare un massimo di 3 byte per carattere mentre utfmb4 può utilizzare 4 byte per carattere. Per le colonne VARCHAR questo normalmente non fa molta differenza poiché MySQL memorizzerà solo tutti i byte necessari (a meno che tu non abbia creato le tue tabelle MyISAM con ROW_FORMAT=FIXED).

Tuttavia, durante l'esecuzione della query, MySQL può creare tabelle temporanee nel motore di archiviazione MEMORY che non supporta righe a lunghezza variabile. Queste tabelle temporanee hanno una dimensione massima e, se tale dimensione viene superata, le tabelle temporanee verranno convertite in tabelle in MyISAM/InnoDB (a seconda della versione di MySQL). La variabile di stato Created_tmp_disk_tables verrà incrementato ogni volta che ciò accade. In tal caso, prova a vedere se aiuta ad aumentare il valore di max_heap_table_size e tmp_table_size .

In alternativa, esegui l'aggiornamento a MySQL 8.0 in cui un nuovo motore di archiviazione che supporta righe a lunghezza variabile viene utilizzato per le tabelle temporanee interne.