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

Prós e contras de TRUNCATE vs DELETE FROM


TRUNCATE não gera nenhum dado de reversão, o que o torna extremamente rápido. Ele apenas desaloca as páginas de dados usadas pela tabela.

No entanto, se você estiver em uma transação e quiser "desfazer" essa exclusão, precisará usar DELETE FROM , que dá a capacidade de reverter.

EDITAR: Observe que o acima está incorreto para o SQL Server (mas se aplica ao Oracle). No SQL Server, é possível reverter uma operação de truncar se você estiver dentro de uma transação e a transação não tiver sido confirmada. Do ponto de vista do SQL Server, uma diferença importante entre DELETE FROM e TRUNCATE é este :"A instrução DELETE remove as linhas uma de cada vez e registra uma entrada no log de transações 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 apenas as desalocações de página no log de transações ."

Em outras palavras, há menos log durante um TRUNCATE porque somente as desalocações de página são registradas no log de transações, enquanto que com um DELETE FROM cada exclusão de linha é registrada. Essa é uma das razões pelas quais o TRUNCATE é extremamente rápido.

Observe também nesse link do MSDN que você não pode truncar tabelas referenciadas por restrições de chave estrangeira, participar de uma exibição indexada ou publicadas usando replicação transacional ou replicação de mesclagem.

EDIÇÃO 2: Outro ponto importante é que TRUNCATE TABLE irá redefinir sua identidade para a semente inicial, enquanto DELETE FROM continuará incrementando de onde parou. Referência:Resposta de Ben Robinson.