sexta-feira, 20 de julho de 2012

TRUNCATE Table x DELETE Table

Fazendo uma comparação entre a instrução DELETE e TRUNCATE temos as seguintes vantagens:

  • Menos espaço transaction log usado. A instrução DELETE remove as linhas uma de cada vez e registra uma entrada no transaction log para cada linha excluída. TRUNCATE TABLE remove os dados desalocando as páginas de dados usadas para armazenar os dados da tabela e registra somente os desalocações página no transaction log.
  • Menos bloqueios. Quando a instrução DELETE é executado cada linha que esta contemplada na instrução de delete da tabela está bloqueada até o final para exclusão. TRUNCATE TABLE sempre bloqueia a tabela e página, mas não cada linha.
  • Sem excepção, páginas zeradas são deixadas na tabela. Depois de uma instrução DELETE é executado, a tabela ainda pode conter páginas vazias. Se a operação de exclusão não usar um bloqueio de tabela, a tabela (heap) conterá muitas páginas vazias. Para os índices, a operação de exclusão pode deixar páginas vazias tbm, embora essas páginas serão desalocada rapidamente por um processo de limpeza em segundo plano.


TRUNCATE TABLE remove todas as linhas de uma tabela, mas a estrutura da tabela e suas colunas, restrições, índices, e assim por diante permanecem. Para remover a definição da tabela, além de seus dados, use o comando DROP TABLE.


Se a tabela contiver uma coluna de identity, o contador para essa coluna é redefinido para o valor default informação na criação do identity. Se não tiver sido definido um valor default de inicio, o valor padrão 1 é usado. Para reter o contador de Identity, utilize DELETE.

Restrições:

Você não pode usar TRUNCATE TABLE em tabelas que:

  • Possuem uma FOREIGN KEY. (Você pode truncar uma tabela que tem uma chave estrangeira que faz referência em si.)
  • Participe de uma indexed view.
  • Uso de replicação transacional ou merge replication.

Para tabelas com uma ou mais dessas características, use a instrução DELETE .
TRUNCATE TABLE não pode ativar uma trigger porque a operação não registra exclusões de linha individuais.

[]s

Nenhum comentário: