Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:DELETE vs TRUNCATE

T-SQL fornisce due parole chiave che consentono di eliminare i dati da una tabella. Sono CANCELLA e TRONCA . Questi sono simili in quello che stanno facendo, tuttavia, usano metodi molto diversi. In questo articolo, discutiamo dei meccanismi alla base di queste parole chiave.

Una differenza tra TRUNCATE e DELETE

TRONCA:

  1. TRUNCATE è un comando DDL.
  2. TRUNCATE TABLE blocca sempre la tabella e la pagina. Tuttavia, non blocca ogni riga.
  3. Non è possibile utilizzare la condizione WHERE.
  4. Il comando rimuove tutti i dati.
  5. TRUNCATE TABLE non può attivare un trigger perché l'operazione non registra le eliminazioni di singole righe.
  6. Più veloce nelle prestazioni, perché non tiene i log.
  7. Il rollback è possibile.

ELIMINA:

  1. DELETE è un comando DML.
  2. L'istruzione DELETE utilizza un blocco di riga durante l'esecuzione. Ogni riga della tabella è bloccata per l'eliminazione.
  3. Puoi specificare i filtri nella clausola WHERE.
  4. Il comando cancella i dati specificati se esiste la condizione WHERE.
  5. DELETE attiva un trigger perché le operazioni vengono registrate singolarmente.
  6. DELETE è più lento di TRUNCATE perché conserva i log.
  7. Il rollback è possibile.

Come eliminare i dati con l'aiuto di TRUNCATE?

L'esempio seguente rimuove tutti i dati dalla tabella Person. SELEZIONA le dichiarazioni sono incluse prima e dopo la TRUNCATE TABLE dichiarazione per confrontare i risultati.

USE AdventureWorks2012;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM Person.Person;
GO
TRUNCATE TABLE Person.Person;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM Person.Person;
GO

Evidenziamo alcuni vantaggi.

La TABELLA TRONCA Il comando elimina tutte le righe da una tabella deallocando le pagine di dati utilizzate per memorizzare i dati della tabella. Una volta completata l'operazione, la tabella contiene zero pagine. Non esegue la registrazione per le eliminazioni di singole righe. Il comando registra la deallocazione della pagina nel registro delle transazioni. Il TRUNCATE il comando utilizza meno spazio di registro. In genere vengono utilizzati meno blocchi. Il comando elimina tutte le righe da una tabella, ma la struttura della tabella e le relative colonne, vincoli, indici e così via rimangono. Per rimuovere il tavolo. devi usare DROP TABLE .

Se una tabella contiene una colonna Identity, il contatore di quella colonna viene reimpostato sul valore di inizializzazione definito per la colonna. Se non è stato definito alcun seme, viene utilizzato il valore predefinito 1. Per conservare il contatore dell'identità, utilizza DELETE invece.

Eliminazione di tutte le righe utilizzando DELETE

L'esempio seguente elimina tutte le righe dalla tabella Person:

DELETE FROM Person.Person;
GO

ELIMINA rimuove le righe una alla volta. Il comando aggiunge il nuovo record al registro delle transazioni per ogni riga eliminata. ELIMINA utilizza un blocco di riga durante l'esecuzione, il che significa che ogni riga della tabella è bloccata per l'eliminazione. Una volta ELIMINA viene eseguita, una tabella può ancora contenere pagine di dati vuote. Ad esempio, le pagine vuote nell'heap non possono essere deallocate senza almeno un blocco tabella esclusivo (LCK_M_X). ELIMINA e TRONCA entrambi possono essere annullati se utilizzati con TRANSACTION .

Leggi anche

Differenza tra DELETE e TRUNCATE Table in SQL Server