DELETE | Vs. | TRUNCATE |
---|---|---|
DELETE é um comando DML. | Tipo de linguagem SQL | TRUNCATE é um comando DDL. |
O comando DELETE pode conter uma cláusula WHERE para excluir apenas determinadas linhas. | Definição | O comando TRUNCATE é usado para excluir todos os dados de uma tabela. Você não pode usar uma cláusula WHERE para filtrar determinadas linhas. |
O comando DELETE define bloqueios em cada registro, exigindo mais bloqueios e recursos do que o comando TRUNCATE. | Bloqueios e Recursos | O comando TRUNCATE requer apenas um bloqueio no nível da tabela e não em cada linha. |
Se você usar uma transação BEGIN, poderá ROLLBACK o comando. | BEGIN/ROLLBACK | Se você usar uma transação BEGIN, poderá ROLLBACK o comando. |
O comando DELETE registrará os dados das linhas excluídas no log de transações. | Uso do log de transações | O comando TRUNCATE registra apenas a tabela excluída como um todo no log de transações. |
O comando DELETE ativará quaisquer gatilhos aplicados à tabela, ou seja, um gatilho de auditoria, a menos que os gatilhos sejam desabilitados primeiro. | Gatilhos | O TRUNCATE não ativará nenhum gatilho aplicado à tabela. Portanto, os gatilhos de auditoria para registrar quem excluiu uma linha não serão acionados. |
O comando DELETE não propagará novamente os valores de identidade da tabela. | Colunas de identidade | O comando TRUNCATE irá propagar novamente (redefinir) os valores de identidade da tabela. |
Ter chaves estrangeiras e/ou visualizações indexadas não tem efeito no comando DELETE, desde que as linhas que você está tentando excluir não sejam referenciadas por outras tabelas. | Chaves estrangeiras e visualizações indexadas | Você não pode usar o comando TRUNCATE se a tabela for referenciada por uma chave estrangeira ou qualquer exibição indexada. |
DELETE = O tempo total para 15 milhões de linhas de dados levou 118 segundos
TRUNCATE = 15 milhões de linhas de dados levou menos de 1 segundo
Se você precisar excluir apenas determinadas linhas de uma tabela, precisará usar o comando DELETE. No entanto, se você precisar excluir todos os registros em uma tabela, deverá usar o comando TRUNCATE, desde que todas as regras acima se apliquem à sua situação.