Pesquisando por aí parece haver relatórios mistos se o tamanho de uma VARCHAR2
coluna no Oracle afeta o desempenho ou não.
Gostaria de dar VARCHAR
uma pequena reviravolta na questão do tamanho e espero obter algumas informações sobre isso:
Dado (multilinha) campos de texto livre ( não coisas curtas como nomes) que você deseja armazenar em um banco de dados (Oracle), há algum ponto (desempenho de escrita ou outro) em não maximizar a VARCHAR
capacidade ( VARCHAR2(4000)
no Oracle), mas escolher um valor menor, como 1024 ou 512, porque provavelmente será suficiente em 98% dos casos.
Isso afeta o uso da memória, especialmente quando um programa cliente precisa alocar memória suficiente para receber um conjunto de dados.
Lembre-se de que muitos aplicativos (especialmente aplicativos da Web) usam UTF-8, que é um conjunto de caracteres multibyte. Como tal, você realmente deve considerar caracteres em vez de bytes.
Se eu esperasse mais de mil caracteres, consideraria ativamente um CLOB. Eu estaria pensando se ele armazenará texto simples ou alguma forma de marcação (wiki / html?), Uso com idiomas não europeus. As Perguntas e Respostas aqui, por exemplo, seriam CLOB, mas os comentários podem caber em um VARCHAR.
Se você maximizar um VARCHAR, em seis meses alguém vai querer aumentá-lo novamente e você estará se culpando por não usar um CLOB.
Geralmente não há considerações de desempenho, embora existam problemas colaterais que podem ser importantes para você. O limite para a
varchar
deve ser pensado como uma restrição como qualquer outra - existe para impor uma regra de negócios.IMO, a pergunta que você deve fazer é "Desejo impedir que os dados de texto livre armazenados neste campo sejam maiores que n bytes/caracteres" - esse é o único fator determinante ao escolher entre
varchar(512)
evarchar(4000)
.Observe que estou assumindo que você está falando sobre
varchar
o tipo SQL - a situação é diferentepl/sql
e a escolha do comprimento pode ser crucial por motivos de alocação de memória.Se um valor menor funcionar para 98% dos casos, mas for necessário um Varchar2(4000) para funcionar em 100% dos casos, você terá pouca escolha a não ser usar o valor maior . Criar uma tabela separada para 2% dos valores e, em seguida, coordenar inserções/seleções etc. adicionaria complexidade que obliteraria qualquer memória ou benefícios de desempenho por não estender o campo.