sql server limitação do tamanho dos dados

3

Esta questão está relacionada ao meu tamanho do tipo de dados SQL
Um varchar(max) parece ser capaz de armazenar até 2 GB. O que eu não consigo entender é que neste link estouro de linha de sql MS diz (minha ênfase) :

A table can contain a maximum of 8,060 bytes per row. In SQL Server 2008, this restriction is relaxed for tables that contain varchar, nvarchar, varbinary, sql_variant, or CLR user-defined type columns. The length of each one of these columns must still fall within the limit of 8,000 bytes; however, their combined widths can exceed the 8,060-byte limit. This applies to varchar, nvarchar, varbinary, sql_variant, or CLR user-defined type columns when they are created and modified, and also to when data is updated or inserted.

Eu não entendo essa afirmação.
Eles dizem que um varchar(max) pode conter até 2GB, mas eles dizem no link acima que o comprimento da coluna não pode ser superior a 8KB
Isso não é contraditório ou estou faltando alguma coisa aqui?

    
por user76678 24.08.2011 / 22:54

1 resposta

3

Para esclarecer as coisas, podemos tomar a primeira afirmação que é muito fundamental:

A table can contain a maximum of 8,060 bytes per row.

Em outras palavras: cada linha deve caber em uma página (8 kB). E, se possível, muitas linhas podem caber em uma página - mas nunca o contrário.

Que tal objetos grandes binários (TEXT, NTEXT, BLOB)? Os dados nessas colunas são armazenados em um local especial. A linha apenas contém um ponteiro para os dados, portanto, a afirmação fundamental acima ainda é válida: uma linha da tabela deve caber em uma página.

Binary large data is stored outside of the table.
Each table row just holds a pointer in each BLOB field which actually points to the data.

Dito isso, o novo recurso varchar (max) é especial e se comporta da seguinte maneira:

  • varchar (n): os campos de texto habituais armazenados na linha, os dados da linha devem caber em uma única página.
  • varchar (máx), pequeno conteúdo de dados: armazenado na linha, desde que todos os dados da linha caibam em uma única página.
  • varchar (max), conteúdo de big data: assim que os dados não cabem mais em uma página, um ponteiro é armazenado na linha e os dados varchar (max) são armazenados separadamente. Nesse caso, varchar (max) se comporta de maneira semelhante ao tipo de dados de texto.

Observe que o conteúdo de big data depende de todas as outras colunas da tabela. Além disso, varchar (max) pode armazenar texto em formato compactado de forma que mais de 8.060 caracteres possam se encaixar em uma página de dados.

Na minha opinião, a declaração O comprimento de cada uma dessas colunas ainda deve estar dentro do limite de 8.000 bytes parece não ser preciso, possivelmente até incorreto (uma coluna varchar (max) pode na verdade, segure 2 GB de dados, embora não sejam armazenados em fila).

    
por 28.08.2011 / 21:14