Existe algum ponto em subdimensionar colunas VARCHAR?

18

Pesquisando por aí parece haver relatórios mistos, independentemente do tamanho de uma VARCHAR2coluna no Oracle afetar o desempenho ou não.

Gostaria de dar VARCHARuma pequena reviravolta na questão do tamanho e espero ter uma ideia:

Dados os campos de texto livre (multilinha) (que não são coisas curtas, como nomes) que você deseja armazenar em um banco de dados (Oracle), existe algum ponto (desempenho ou desempenho incorreto) em não maximizar a VARCHARcapacidade ( VARCHAR2(4000)no Oracle), mas escolher um valor menor, como 1024 ou 512, porque provavelmente será suficiente em 98% dos casos.

Martin
fonte
Pergunta
Vadzim

Respostas:

12

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 de vários bytes. Como tal, você deve realmente considerar caracteres em vez de bytes.

Se eu esperava mais de mil caracteres, consideraria ativamente um CLOB. Eu estaria pensando se ele armazenará texto sem formatação ou alguma forma de marcação (wiki / html?), Uso com idiomas que não sejam do euro. As perguntas e respostas aqui, por exemplo, seriam CLOB, mas os comentários podem caber em um VARCHAR.

Se você atingir um VARCHAR no máximo, em seis meses alguém desejará aumentá-lo novamente e você estará se chutando por não usar um CLOB.

Gary
fonte
2
O UTF-8 geralmente usa um byte para um caractere nos idiomas ocidentais. É multi-byte, no sentido em que permite sequências de "escape" multi-byte para representar caracteres não ocidentais.
Eric J.
9

Geralmente, não há considerações de desempenho, embora haja problemas secundários que podem ser importantes para você. O limite de a varchardeve ser considerado uma restrição como qualquer outra - existe para impor uma regra de negócios.

Na 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 na escolha entre varchar(512)e varchar(4000).

Observe que estou assumindo que você está falando sobre varcharo tipo SQL - a situação é diferente pl/sqle a escolha do tamanho pode ser crucial por motivos de alocação de memória.

Jack Douglas
fonte
Obrigado. No que diz respeito à minha experiência (muito limitada), qualquer "regra de negócios" que determine um limite entre "500 - 3999" é simplesmente arbitrária, ou seja, alguém simplesmente gostou do número. IMHO, se eu estou indo para texto livre e não há conseqüências de implementação (o contexto desta pergunta), é o máximo (4000) ou não é texto livre. --- O ponto que estou tentando enfatizar neste comentário: Acho que nunca haverá uma regra comercial ajudando a escolher entre. 512 e 4000 (a menos que seja: "o maior número possível de caracteres")
Martin
Se é realmente "o maior número possível de caracteres", então como @gary diz, você deve considerar um clob, não deveria?
91111 Jack Douglas
4

Se um valor menor funcionará em 98% dos casos, mas é necessário um Varchar2 (4000) para trabalhar em 100% dos casos, você terá pouca opção 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 quaisquer benefícios de memória ou desempenho por não estender o campo.

Leigh Riffel
fonte