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

SQL Server:DELETE vs TRUNCATE


O T-SQL fornece duas palavras-chave que permitem excluir dados de uma tabela. Eles são EXCLUIR e TRUNCAR . Estes são semelhantes no que estão fazendo, no entanto, eles usam métodos muito diferentes. Neste artigo, discutimos mecanismos subjacentes para essas palavras-chave.

Uma diferença entre TRUNCATE e DELETE

TRUNCAR:

  1. TRUNCATE é um comando DDL.
  2. TRUNCATE TABLE sempre bloqueia a tabela e a página. No entanto, ele não bloqueia cada linha.
  3. A condição WHERE não pode ser usada.
  4. O comando remove todos os dados.
  5. TRUNCATE TABLE não pode ativar um gatilho porque a operação não registra exclusões de linhas individuais.
  6. Mais rápido no desempenho, porque não mantém registros.
  7. É possível reverter.

EXCLUIR:

  1. DELETE é um comando DML.
  2. A instrução DELETE usa um bloqueio de linha durante a execução. Cada linha da tabela está bloqueada para exclusão.
  3. Você pode especificar filtros na cláusula WHERE.
  4. O comando exclui dados especificados se a condição WHERE existir.
  5. DELETE ativa um acionador porque as operações são registradas individualmente.
  6. DELETE é mais lento que TRUNCATE porque mantém registros.
  7. É possível reverter.

Como excluir dados com a ajuda de TRUNCATE?


O exemplo a seguir remove todos os dados da tabela Person. SELECIONAR instruções são incluídas antes e depois de TRUNCATE TABLE declaração para comparar os resultados.
USE AdventureWorks2012;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM Person.Person;
GO
TRUNCATE TABLE Person.Person;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM Person.Person;
GO

Vamos destacar algumas vantagens.

A TABELA TRUNCADA O comando exclui todas as linhas de uma tabela desalocando as páginas de dados usadas para armazenar os dados da tabela. Uma vez concluída a operação, a tabela contém zero páginas. Ele não registra as exclusões de linhas individuais. O comando registra a desalocação de página no log de transações. O TRUNCAR comando usa menos espaço de log. Menos bloqueios são normalmente usados. O comando exclui todas as linhas de uma tabela, mas a estrutura da tabela e suas colunas, restrições, índices etc. permanecem. Para remover a mesa. você precisa usar DROP TABLE .

Se uma tabela contiver uma coluna de identidade, o contador dessa coluna será redefinido para o valor de semente definido para a coluna. Se nenhuma semente foi definida, o valor padrão 1 é usado. Para manter o contador de identidade, use DELETE em vez de.

Excluindo todas as linhas usando DELETE


O exemplo a seguir exclui todas as linhas da tabela Person:
DELETE FROM Person.Person;
GO

EXCLUIR remove as linhas uma de cada vez. O comando adiciona o novo registro ao log de transações para cada linha excluída. EXCLUIR usa um bloqueio de linha durante a execução, o que significa que cada linha na tabela está bloqueada para exclusão. Uma vez EXCLUIR é executado, uma tabela ainda pode conter páginas de dados vazias. Por exemplo, páginas vazias no heap não podem ser desalocadas sem pelo menos um bloqueio de tabela exclusivo (LCK_M_X). EXCLUIR e TRUNCAR ambos podem ser revertidos quando usados ​​com TRANSACTION .

Leia também


Diferença entre a tabela DELETE e TRUNCATE no SQL Server