Pergunta

Como o MySQL armazenar um campo varchar? Posso assumir que o seguinte padrão representa os tamanhos de armazenamento sensíveis:

1,2,4,8,16,32,64,128,255 (max)

Um esclarecimento via exemplo. Vamos dizer que eu tenho um campo varchar de 20 caracteres. O MySQL ao criar esse campo, espaço basicamente reserva para 32 bytes (não tenho certeza se eles são bytes ou não), mas só permitem 20 a ser inserido?

Eu acho que eu estou preocupado sobre como otimizar espaço em disco para uma mesa enorme.

Foi útil?

Solução

Para responder à pergunta, sobre os usos, MySql disco 1 + o tamanho que é usado no campo para armazenar os dados (varchar por isso, se a coluna foi declarado (45), eo campo foi "FooBar" que usaria 7 bytes no disco, a menos que naturalmente você estava usando um conjunto de caracteres de vários bytes, onde ele estaria usando 14 bytes). Então, no entanto você declarar suas colunas, ele não vai fazer a diferença na extremidade de armazenamento (você disse que está preocupado com otimização de disco para uma mesa maciça). No entanto, ele faz a diferença nas consultas, como de VARCHAR são convertidas para CHAR, quando MySql faz uma tabela temporária (SORT, ORDER, etc) e os mais registros que você pode caber em uma única página, a menos memória e mais rápido suas digitalizações tabela vai ser.

Outras dicas

MySQL armazena um campo VARCHAR como uma ficha de comprimento variável, com qualquer um de um byte ou um prefixo de dois bytes para indicar o tamanho da ficha.

Ter um padrão de tamanhos de armazenamento realmente não faz qualquer diferença para como o MySQL vai funcionar quando se trata de armazenamento de registros de comprimento variável. O comprimento especificado em um VARCHAR (x) declaração irá simplesmente determinar o comprimento máximo dos dados que podem ser armazenados. Basicamente, um VARCHAR (16) não é diferente de disco de sábio do que um VARCHAR (128).

Esta página do manual tem uma explicação mais detalhada.

Edit: Com relação à sua pergunta atualizado, a resposta ainda é a mesma. Um campo varchar só vai usar tanto espaço no disco como os dados armazenados nele (mais uma sobrecarga de um ou dois bytes). Então, não importa se você tem um varchar (16) ou um varchar (128), se você armazenar uma seqüência de 10 caracteres nela, você só vai usar 10 bytes (mais 1 ou 2) de espaço em disco .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top