Exemplo de Utilização do tipo binário do MySQL
Tenho 20 caracteres
'id' CHAR(20) NOT NULL CHARACTER SET latin1,
Posso usar o tipo binário de dados:
para salvar o espaço
2) acelerar as pesquisas, já que o id é o índice primário?
Em caso afirmativo, como? Tenho de converter a minha identificação em hex?
1 answers
O tipo de dados do MySQL, como o CHAR
, contém cadeias de caracteres de comprimento fixo. Você ainda tem que especificar a largura da coluna, por exemplo BINARY(20)
. A única diferença é que MySQL trata os dados dentro da coluna como bytes brutos em vez de texto codificado.
Assumindo que mantém os mesmos dados dentro da coluna, mas apenas muda o tipo de dados da coluna para BINARY(20)
em vez de CHAR(20) CHARACTER SET latin1
, então:
-
Para salvar o espaço
latin1
é um um conjunto de caracteres de um byte, ambos os tipos de dados ocuparão 20 bytes por campo. Ver Requisitos De Armazenamento Do Tipo De Dados . -
Acelerar as buscas, já que o id é o índice primário?
Na verdade, não. A única diferença irá surgir através do tempo adicional necessário para realizar comparações sob a sua colação escolhida. Se isso é realmente preocupante( e não deveria ser), você poderia simplesmente usar a colaçãolatin1_bin
Sim. Deve coluna, na verdade, contém dados de texto, você deixará de se beneficiar a partir do MySQL transcodificação automática e aplicação de agrupamentos: para operações de acordo com tal comportamento, nem precisa de o pedir explicitamente que o MySQL (perder os benefícios de indexação), ou então realizá-lo dentro da camada de aplicação (pode ser muito caro, de fato).
Se, depois de investigar, descobrir que o seu problema reside, de facto, no comprimento da sua chave primária, poderá considerar a utilização de um valor substituto: por exemplo, o tipo de dados MySQL SERIAL
.