Impacto na velocidade do uso do varchar no SQL Server 2008

9

Antigamente, usar varcharover charera um grande não, não, pois ele varcharera armazenado em uma página diferente do resto da linha. Ainda hoje é o caso do SQL Server 2008? Vou ver algum ganho de memória / desempenho ao alterar 1-3 varchar(5)colunas para char(5)colunas em uma tabela com

a) digamos 2.000.000 linhas b) se alguma das varcharcolunas fizer parte dos índices / das chaves primárias

Carlo V. Dango
fonte
2
Possível duplicata de pergunta Como os campos muito longos (varchar / nvarchar) afetam o desempenho e o uso do disco? (MSSQL Server 2008) . Se você acha que não é uma cópia, definitivamente encontrará algumas respostas também.
Marian

Respostas:

8

Você está confundindo texto / varchar (max) (tipos LOB) com varchar (n) / char (n)

Caso contrário, se você usar char (1000) e não varchar (1000) e o comprimento médio dos dados for, por exemplo, 42, esse é um design ruim e com muito espaço desperdiçado.

gbn
fonte
no DB2 e em alguns outros mecanismos de banco de dados, char e varchar foram armazenados de maneira diferente e alguns dos conselhos para o DB2 foram transferidos para o SQL Server.
Andrew Bickerton
@ Andrew Bickerton: mais um mito ...
GBN
você pode me apontar na direção de onde esse mito foi desmascarado? (Concordo que o conselho não se aplica ao SQL Server)
Andrew Bickerton
Também estou me referindo a uma das versões originais do DB2 (provavelmente não foi assim nos últimos 10 anos), semelhante ao conselho do SQL 2000 de que as PKs devem estar sem cluster por causa de problemas de desempenho que ainda estão por aí - embora não ser mais verdadeiro
Andrew Bickerton
@ Andrew Bickerton: basta olhar para as estruturas de disco do SQL Server (várias respostas para mim) stackoverflow.com/search?q=user%3A27535+anatomia . Desculpe pela resposta tardia
gbn
3

É difícil falar sobre ganhos ou ocorrências específicas de desempenho sem saber mais sobre seu esquema, mas em geral você deseja definir o tipo de dados para corresponder aos seus dados. Se você precisar de uma largura fixa (por exemplo, você sabe que sempre terá cinco caracteres), use char (5). Se você tem uma quantidade variável de dados, use varchar (5).

Para SQL, quanto mais dados você puder caber em uma página, melhor será seu desempenho.

SQLRockstar
fonte
3

Tanto quanto sei, o SQL Server nunca armazenou tipos de dados varchar ou nvarchar fora de linha. Texto e NText são diferentes. Existem alguns bits extras que são armazenados para uma coluna de largura variável, mas é isso.

Mrdenny
fonte