Pergunta

Qual é a desvantagem de escolher um grande valor para o máximo ao criar um varchar ou coluna varbinary?

Estou usando o MS SQL, mas suponho que isso seria relevante para outros dbs também.

Graças

Foi útil?

Solução

Isso depende se é sempre razoável para armazenar uma grande quantidade de dados na coluna particular.

Se você declarar uma coluna que nunca iria armazenar adequadamente a quantidade de dados (ou seja, um primeiro nome do funcionário como um VARCHAR (1000)), você acaba com uma variedade de problemas

  1. Muitos, se não a maioria das APIs do cliente (ou seja, controladores ODBC, o driver JDBC, etc) alocar buffers de memória no cliente que são grandes o suficiente para armazenar o tamanho máximo de uma coluna específica. Assim, mesmo que o banco de dados tem apenas para armazenar os dados reais, você pode aumentar substancialmente a quantidade de memória o aplicativo usa cliente.
  2. Você perde a capacidade de conduzir regras de validação de dados (ou informações impart sobre os dados) a partir da definição da tabela. Se o banco de dados permite que 1000 caracteres primeiros nomes, cada aplicação que interage com o banco de dados provavelmente vai acabar por ter suas próprias regras para o quão grande um nome empregado pode ser. Se isso não for atenuado, colocando uma camada de procedimento armazenado entre todas as aplicações e as tabelas, isto geralmente leva a várias aplicações que têm várias regras.
  3. A lei de Murphy afirma que, se você permitir 1000 caracteres, alguém acabará por armazenar 1000 caracteres na coluna, ou pelo menos um valor grande o suficiente para causar erros em mais uma ou aplicação (ou seja, ninguém verificou para ver se o nome do funcionário de cada aplicação campo pode exibir 1000 caracteres).

Outras dicas

Depende do RDBMS. IIRC, MySQL aloca uma sobrecarga de dois bytes para varchars> 255 caracteres (para rastrear o comprimento VARCHAR). MSSQL <= 2000 lhe permitiria alocar um tamanho de linha> 8060 bytes, mas seria um fracasso se você tentou inserir ou atualizar uma linha que realmente excedeu 8060 bytes. SQL 2005 [1] permite a inserção, mas irá alocar uma nova página para o excesso e deixar um ponteiro para trás. Isto, obviamente, afeta o desempenho.

[1] varchar (max) é um pouco de um caso especial, mas também irá alocar uma página estouro se o comprimento do campo é> 8000 ou a linha> 8060. Isso é com padrões MSSQL e comportamento pode mudar com os grandes tipos de opção de linha de dados em.

Você pode ser a adição de um risco de quebrar a sua aplicação se tem uma grande quantidade de dados em alguma forma (como de uma interface externa) e seu aplicativo não é projetado para lidar com isso.

Como um bom design, você deve sempre limitar o tamanho dos campos para um valor realista.

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