Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server:DELETE vs TRUNCATE

T-SQL udostępnia dwa słowa kluczowe, które umożliwiają usuwanie danych z tabeli. Są USUŃ i OBCIĄGNIĘCIE . Są one podobne w tym, co robią, jednak stosują bardzo różne metody. W tym artykule omawiamy mechanizmy leżące u podstaw tych słów kluczowych.

Różnica między OBCIĄŻAJ a USUŃ

OBCIĄŻENIE:

  1. TRUNCATE to polecenie DDL.
  2. TRUNCATE TABLE zawsze blokuje tabelę i stronę. Jednak nie blokuje każdego wiersza.
  3. Nie można użyć warunku WHERE.
  4. Polecenie usuwa wszystkie dane.
  5. TRUNCATE TABLE nie może aktywować wyzwalacza, ponieważ operacja nie rejestruje usunięcia pojedynczych wierszy.
  6. Szybsza wydajność, ponieważ nie przechowuje logów.
  7. Możliwe jest wycofanie.

USUŃ:

  1. DELETE to polecenie DML.
  2. Instrukcja DELETE używa blokady wiersza podczas wykonywania. Każdy wiersz w tabeli jest zablokowany do usunięcia.
  3. Możesz określić filtry w klauzuli WHERE.
  4. Polecenie usuwa określone dane, jeśli istnieje warunek WHERE.
  5. DELETE aktywuje wyzwalacz, ponieważ operacje są rejestrowane indywidualnie.
  6. DELETE jest wolniejsze niż TRUNCATE, ponieważ przechowuje logi.
  7. Możliwe jest wycofanie.

Jak usunąć dane za pomocą TRUNCATE?

Poniższy przykład usuwa wszystkie dane z tabeli Person. WYBIERZ oświadczenia są zawarte przed i po TRUNCATE TABLE oświadczenie do porównania wyników.

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

Podkreślmy kilka zalet.

OBCIĘCIE TABELI polecenie usuwa wszystkie wiersze z tabeli poprzez zwolnienie stron danych używanych do przechowywania danych tabeli. Po zakończeniu operacji tabela zawiera zero stron. Nie rejestruje usuwania pojedynczych wierszy. Polecenie zapisuje zwolnienie stron w dzienniku transakcji. OBCIĄGNIĘCIE polecenie zajmuje mniej miejsca w dzienniku. Zwykle stosuje się mniej zamków. Polecenie usuwa wszystkie wiersze z tabeli, ale struktura tabeli i jej kolumny, ograniczenia, indeksy itd. pozostają. Aby usunąć stół. musisz użyć DROP TABLE .

Jeśli tabela zawiera kolumnę tożsamości, licznik dla tej kolumny jest resetowany do wartości inicjatora zdefiniowanej dla kolumny. Jeśli nie zdefiniowano materiału siewnego, używana jest wartość domyślna 1. Aby zachować licznik tożsamości, użyj DELETE zamiast tego.

Usuwanie wszystkich wierszy za pomocą DELETE

Poniższy przykład usuwa wszystkie wiersze z tabeli Osoba:

DELETE FROM Person.Person;
GO

USUŃ usuwa wiersze pojedynczo. Polecenie dodaje nowy rekord do dziennika transakcji dla każdego usuniętego wiersza. USUŃ używa blokady wiersza podczas wykonywania, co oznacza, że ​​każdy wiersz w tabeli jest zablokowany do usunięcia. Raz USUŃ jest wykonywane, tabela może nadal zawierać puste strony danych. Na przykład, puste strony w stercie nie mogą być zwalniane bez co najmniej blokady tabeli na wyłączność (LCK_M_X). USUŃ i OBCIĄGNIĘCIE oba można wycofać, gdy są używane z TRANSACTION .

Przeczytaj również

Różnica między tabelą DELETE i TRUNCATE w SQL Server


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz tabelę (strukturę) z istniejącej tabeli

  2. SQL JOIN a wydajność IN?

  3. najlepszy sposób na konwersję i walidację ciągu daty

  4. Jak wybrać tylko pierwsze wiersze dla każdej unikalnej wartości kolumny?

  5. Jak ustawić sortowanie kolumny w SQL Server (T-SQL)