Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

varchar (max) em todos os lugares?


Usando VARCHAR(MAX) você está basicamente dizendo ao SQL Server "armazene os valores neste campo como você vê melhor", o SQL Server escolherá se deseja armazenar valores como um VARCHAR regular ou como um LOB (objeto grande). Em geral, se os valores armazenados forem inferiores a 8.000 bytes, o SQL Server tratará os valores como um VARCHAR normal tipo.

Se os valores armazenados forem muito grandes, então a coluna poderá passar da página para as páginas LOB, exatamente como acontece com outros tipos de LOB (text , ntext e imagem ) - se isso acontecer, são necessárias leituras de página adicionais para ler os dados armazenados nas páginas adicionais (ou seja, há uma penalidade de desempenho), no entanto isso só acontece se os valores armazenados forem muito grandes .

Na verdade, no SQL Server 2008 ou posterior, os dados podem transbordar para páginas adicionais, mesmo com os tipos de dados de comprimento fixo (por exemplo, VARCHAR(3.000) ), no entanto, essas páginas são chamadas de páginas de dados de estouro de linha e são tratadas de maneira um pouco diferente.

Versão curta: do ponto de vista do armazenamento, não há desvantagem em usar VARCHAR(MAX) sobre VARCHAR(N) para alguns N .

(Observe que isso também se aplica aos outros tipos de campo de comprimento variável NVARCHAR e VARBINARY )

FYI - Você não pode criar índices em VARCHAR(MAX) colunas