Um blob é mais eficiente que um varchar para dados que podem ter QUALQUER tamanho?

9

Ao configurar um banco de dados, quero usar o tipo de dados mais eficiente para dados potencialmente razoavelmente longos. Atualmente, meu projeto é armazenar títulos de músicas e pensamentos referentes a essa música. Alguns títulos podem ter 5 caracteres ou mais de 100 caracteres e os pensamentos podem demorar bastante.

É mais eficiente usar um varchar definido como 8000 ou usar um blob? O uso de um blob é o mesmo que um varchar, pois existe um tamanho definido que ele é alocado, independentemente do que ele contém? ou é apenas um ponteiro e realmente não usa muito espaço na mesa? Existe um determinado tamanho definido de um blob em KB ou é expansível?

BillyNair
fonte

Respostas:

12

Eu sugeriria o uso de TEXT sobre BLOB.

Diferença Primária

  • TEXT e BLOB são armazenados fora da tabela, com a tabela apenas com um ponteiro para o local do armazenamento real.

  • VARCHAR é armazenado em linha com a tabela.

Diretriz Primária

  1. As mensagens em formato de texto quase sempre devem ser armazenadas como TEXTO (elas acabam sendo arbitrariamente longas)

  2. Os atributos da string devem ser armazenados como VARCHAR (o nome do usuário de destino, o assunto, etc ...).


Para escolher quando usar o VARCHAR e quando usar o TEXT, foi discutido extensivamente sobre o estouro de pilha nesses segmentos:

  1. MySQL: VARCHAR grande vs. texto?

  2. MySQL varchar (2000) vs texto?

Há também um tópico de comparação de desempenho para isso no fórum MySQL.

Ozair Kafray
fonte
Obrigado por esses links. Eles responderam algumas das perguntas que eu tinha e acabei usando um TEXTO. Não era exatamente o que eu procurava no espaço físico que ocupa no servidor, mas acho que, desde que seja apenas um projeto pequeno, não importa. Mais tarde, se eu começar a fazer projetos maiores, vou precisar descobrir.
BillyNair
0

Eu acho que você deve usar blob apenas se você tiver um tipo de dados complexo serializado, ou seja, se você quiser armazenar em uma única tabela uma classe complexa. Se você deseja armazenar apenas uma String (ou algo equivalente), não use o blob.

m3th0dman
fonte