utf je ve skutečnosti utfmb3 a může používat maximálně 3 bajty na znak, zatímco utfmb4 může používat 4 bajty na znak. U sloupců VARCHAR to obvykle není velký rozdíl, protože MySQL bude ukládat pouze tolik bajtů, kolik je potřeba (pokud jste nevytvořili své tabulky MyISAM s ROW_FORMAT=FIXED).
Během provádění dotazu však může MySQL vytvořit dočasné tabulky v paměťovém modulu MEMORY, který nepodporuje řádky s proměnnou délkou. Tyto dočasné tabulky mají maximální velikost, a pokud je tato velikost překročena, dočasné tabulky budou převedeny na tabulky v MyISAM/InnoDB (v závislosti na vaší verzi MySQL). Stavová proměnná Created_tmp_disk_tables
se zvýší pokaždé, když k tomu dojde. Pokud ano, zkuste zjistit, zda pomáhá zvýšit hodnotu max_heap_table_size
a tmp_table_size
.
Případně upgradujte na MySQL 8.0, kde se pro interní dočasné tabulky používá nový modul úložiště, který podporuje řádky s proměnnou délkou.