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

Plusy i minusy TRUNCATE vs DELETE FROM

TRUNCATE nie generuje żadnych danych cofania, dzięki czemu działa błyskawicznie. Po prostu zwalnia strony danych używane przez tabelę.

Jeśli jednak jesteś w transakcji i chcesz mieć możliwość "cofnięcia" tego usunięcia, musisz użyć DELETE FROM , co daje możliwość wycofania.

EDYTUJ: Zauważ, że powyższe jest niepoprawne dla SQL Server (ale dotyczy Oracle). W SQL Server możliwe jest wycofanie operacji obcinania, jeśli znajdujesz się w transakcji, a transakcja nie została zatwierdzona. Z perspektywy programu SQL Server jedną kluczową różnicą między DELETE FROM a TRUNCATE jest this :"Instrukcja DELETE usuwa wiersze pojedynczo i zapisuje wpis w dzienniku transakcji dla każdego usuniętego wiersza. TRUNCATE TABLE usuwa dane przez cofnięcie alokacji stron danych używanych do przechowywania danych tabeli i rejestruje tylko cofnięcia alokacji stron w dzienniku transakcji ”.

Innymi słowy, podczas operacji TRUNCATE jest mniej rejestrowania, ponieważ w dzienniku transakcji są rejestrowane tylko cofnięcia alokacji stron, podczas gdy w przypadku polecenia DELETE FROM rejestrowane jest usuwanie każdego wiersza. To jeden z powodów, dla których TRUNCATE działa błyskawicznie.

Zauważ również, że z tego łącza MSDN nie można obcinać tabel, do których odwołują się ograniczenia klucza obcego, uczestniczyć w widoku indeksowanym lub publikowanych przy użyciu replikacji transakcyjnej lub replikacji scalającej.

EDYCJA 2: Innym kluczowym punktem jest to, że TRUNCATE TABLE zresetuje twoją tożsamość do początkowego ziarna, podczas gdy DELETE FROM będzie kontynuowało inkrementację od miejsca, w którym zostało przerwane. Odniesienie:odpowiedź Bena Robinsona.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdowanie duplikatów w jednej kolumnie za pomocą wybierz gdzie w SQL Server 2008

  2. Zwraca wartość i zestaw wyników z procedury składowanej klasycznego asp

  3. Jak uzyskać pierwszy rekord z każdej grupy z wyniku pobranego za pomocą polecenia group by?

  4. Maksymalna przestrzeń rzeczywista w varbinary (max) w SQL Server

  5. Pytanie dotyczące prostej procedury składowanej