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?

 0
Author: user3054967, 2013-12-02

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:

  1. Para salvar o espaço

    Não. Uma vez que 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 .
  2. 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ção latin1_bin Sim.
  3. 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).

Estás mesmo a sofrer de falta de espaço de armazenamento ou de Buscas lentas? Em caso afirmativo, talvez você deva analisar seu armazenamento/consultas de acordo, a fim de determinar onde os recursos estão sendo açambarcados; caso contrário, eu sou lembrado da máxima de Knuth: otimização prematura é a raiz de todo o mal.

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.

 1
Author: eggyal, 2013-12-02 20:33:52