Requisitos de armazenamento para a coluna MySQL TEXT

0

Eu tenho uma tabela MySQL chamada errormsg2 usando o mecanismo de armazenamento MyISAM com cerca de uma dúzia de colunas.

Duas dessas colunas estimam a conta para a maior parte do espaço usado para cada linha e são do tipo de dados TEXT. Eles são backtrace e msg .

Estou tentando estimar a quantidade de armazenamento necessária para cada linha, e me deparei com a seguinte contradição:

show table status where name = 'errormsg2'; mostra que (data_length + index_length) / rows tem cerca de 778 bytes por linha.

select avg( bit_length( em.backtrace ) + bit_length( em.msg ) ) / 8 from errormsg2 em; mostra uma média de 899 bytes de texto por linha apenas dessas duas colunas.

Como é possível que a tabela armazene mais dados do que usa? O que estou perdendo?

    
por Scott 08.06.2013 / 20:48

1 resposta

1

Uma coisa a considerar é codificar problemas. O UTF-8, por exemplo, usa 5 bytes para alguns caracteres. Se você não tem dados, ou dados variáveis, o banco de dados é forçado a assumir o pior: que cada caractere pode ter 5 bytes de comprimento. Assim, pode alocar mais do que realmente precisa usar.

Note que o UTF-16, embora supostamente apenas 2 bytes, também pode ser vítima do mesmo tipo de problemas: ele tem que codificar pares substitutos, que têm 4 bytes de comprimento. O UTF-16 tem vários outros problemas e alguns defendem sempre o uso de UTF-8

    
por 08.06.2013 / 20:51

Tags