Eu tenho uma tabela com aproximadamente 100 milhões de linhas. Uma das colunas é uma VARCHAR(64)
com utf8mb4
codificação para armazenar apelidos de usuários (outras são alguns números inteiros).
Os dados nessa coluna possuem MAX(LENGTH()) == 42
e MAX(CHAR_LENGTH()) == 24
(posso anexar uma imagem da distribuição de comprimentos, se necessário). Cerca de 90% das linhas usam apenas caracteres ASCII.
Na documentação do MySQL,
CHAR(30) pode conter até 30 caracteres. [...] uma coluna CHAR(255) pode exceder 768 bytes
Então, isso significa que ele pode armazenar N caracteres, até mesmo multibyte? Que tal um varchar, o tamanho especificado significa bytes ou caracteres?
Minha tabela exige principalmente gravação ( INSERT O.D.K. UPDATE
). É uma boa ideia mudar para um campo de comprimento constante (especialmente com strings não muito longas) em vez de tê-los como um campo de comprimento variável, provavelmente armazenado em algum outro lugar do disco?
Distribuição de comprimento de bytes:
Distribuição Char_length: