Usuário com melhor resposta
Char e VarChar

Pergunta
-
Respostas
-
Erial, concordo plenamente com a resposta do Fabrizzio, só veja se é realmente necessario fazer o shrink pois com o tempo a base vai voltar a este tamanho e o uso do shrink pode causar fragmentação do disco.
Respondendo a sua ultima pergunta quando um tipo de campo de string não tiver um tamanho padrão por exemplo nome o ideal é cria-lo como varchar, agora por exemplo caso seja a sigla de um estado o ideal é cria-lo como char(2) pois este tamanho nunca vai mudar.
Alexandre Matayosi Conde Mauricio.
- Marcado como Resposta erial quinta-feira, 15 de agosto de 2013 13:26
Todas as Respostas
-
Erial,
Sim e não rs...Bom, explicando melhor...
O que irá diminuir é o tamanho bruto de sua tabela, coisa que pode ser visualizada através deste código abaixo. Então, sim, a sua tabela diminuiu e consequentemente seu MDF tambem está menor no disco, ao menos na parte efetivamente usada.
--Table creation IF(OBJECT_ID('TabelaCharVarchar') IS NOT NULL) DROP TABLE TabelaCharVarchar CREATE TABLE TabelaCharVarchar ( Nome CHAR(100) ) GO --Data load INSERT INTO TabelaCharVarchar SELECT REPLICATE('a', 60) GO 5000 --Table size with CHAR EXEC sp_spaceused 'TabelaCharVarchar' /* name rows reserved data index_size unused TabelaCharVarchar 5000 584 KB 568 KB 8 KB 8 KB */ --Alter to VARCHAR ALTER TABLE TabelaCharVarchar ALTER COLUMN Nome VARCHAR(100) --Table size with VARCHAR EXEC sp_spaceused 'TabelaCharVarchar' /* name rows reserved data index_size unused TabelaCharVarchar 5000 1160 KB 1128 KB 8 KB 24 KB */
Porem o SQL Server trabalha com espaço em disco alocado mas não utilizado, isso faz com que possa crescer sem realizar uma das operações mais custosas para o DbEngine, que é justamente a reserva de espaço em disco.
Para que o espaço não mais utilizado pela alteração do CHAR para VARCHAR seja liberado para o sistema operacional e não seja mais visto no MDF, fazendo com que efetivamente seu arquivo MDF em disco reduza basta realizar um Shrink da base de dados, mas lembrando, com isso voce perderá performance caso sua base precise crescer novamente devido a utilização.
<b>Fabrizzio A. Caputo</b><br/> Certificações:<br/> MCT<br/> MCC<br/> Oracle OCA 11g<br/> MCITP SQL Server 2008 BI<br/> MCITP SQL Server 2008 Implementation and Maintenance<br/> MCITP SQL Server 2008 Developer<br/> ITIL V3 Foundation <br/> Blog Pessoal: <a href="http://fabrizziocaputo.wordpress.com">www.fabrizziocaputo.wordpress.com</a><br/> Email: fabrizzio.antoniaci@gmail.com
- Sugerido como Resposta Leonardo N. D'Amato quinta-feira, 15 de agosto de 2013 12:00
-
-
Erial, concordo plenamente com a resposta do Fabrizzio, só veja se é realmente necessario fazer o shrink pois com o tempo a base vai voltar a este tamanho e o uso do shrink pode causar fragmentação do disco.
Respondendo a sua ultima pergunta quando um tipo de campo de string não tiver um tamanho padrão por exemplo nome o ideal é cria-lo como varchar, agora por exemplo caso seja a sigla de um estado o ideal é cria-lo como char(2) pois este tamanho nunca vai mudar.
Alexandre Matayosi Conde Mauricio.
- Marcado como Resposta erial quinta-feira, 15 de agosto de 2013 13:26