Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Impacto da definição de coluna VARCHAR2 com maior comprimento


A resposta depende se você está falando sobre uma coluna em uma tabela de banco de dados ou uma variável em um programa PL/SQL.

Coluna do banco de dados

A quantidade de armazenamento usada é proporcional ao tamanho dos dados armazenados.

variável PL/SQL

Se a variável for declarada com um tamanho de 1 a 4000 (11g+) / 1999 (10g ou anterior), a memória será alocada para o comprimento máximo (ou seja, VARCHAR2(100) exigirá pelo menos 100 bytes de memória).

Se a variável for declarada com tamanho 4001 (11g+) / 2000 (10g ou anterior) ou maior, a memória será alocada de acordo com o tamanho dos dados armazenados. (uma questão secundária interessante seria, se o valor da variável for alterado, como a memória é redimensionada - ela realoca outro buffer com o novo tamanho?)

Referência para 10g:tipos de dados PL/SQL

Variáveis ​​VARCHAR2 pequenas são otimizadas para desempenho e as maiores são otimizadas para uso eficiente da memória. O ponto de corte é de 2.000 bytes. Para um VARCHAR2 com 2.000 bytes ou mais, o PL/SQL aloca dinamicamente apenas memória suficiente para manter o valor real. Para uma variável VARCHAR2 menor que 2.000 bytes, o PL/SQL pré-aloca o comprimento total declarado da variável. Por exemplo, se você atribuir o mesmo valor de 500 bytes a uma variável VARCHAR2(2000 BYTE) e a uma variável VARCHAR2(1999 BYTE), a primeira ocupará 500 bytes e a segunda, 1999 bytes.

Referência para 11g:evitando sobrecarga de memória no código PL/SQL

Especifique um tamanho mais de 4000 caracteres para a variável VARCHAR2; O PL/SQL espera até que você atribua a variável e, em seguida, aloca apenas o armazenamento necessário