Różnica między tabelą drop i tabelą truncate?

Mam kilka tabel, które buduję jako część mojego raportu rollup. Nie potrzebuję ich później. Ktoś wspomniał, aby je obciąć, ponieważ byłoby to szybsze.

Author: juan, 2008-09-26

19 answers

Usuwanie rekordów z tabeli rejestruje każde usunięcie i wykonuje wyzwalacze delete dla usuniętych rekordów. Truncate to potężniejsze polecenie, które opróżnia tabelę bez rejestrowania każdego wiersza. SQL Server uniemożliwia obcinanie tabeli z odwołującymi się do niej kluczami obcymi, ze względu na konieczność sprawdzania kluczy obcych w każdym wierszu.

Truncate jest zwykle bardzo szybki, idealny do czyszczenia danych z tymczasowej tabeli. Zachowuje strukturę tabeli na przyszłość użyj.

Jeśli chcesz usunąć definicje tabeli oraz dane, po prostu upuść tabele.

Zobacz Ten artykuł MSDN aby uzyskać więcej informacji

 83
Author: JoshL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:07:38

DROP TABLE usuwa tabelę.

TRUNCATE TABLE usuwa ją, ale pozostawia jej strukturę dla przyszłych danych.

 69
Author: ceejayoz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:03:51

DROP and TRUNC do different things:

TABELA TRUNCATE

Usuwa wszystkie wiersze z tabeli bez rejestrowanie usuwania poszczególnych wierszy. Tabela TRUNCATE jest podobna do Usuń oświadczenie bez klauzuli WHERE; jednak obcinanie tabeli jest szybsze i wykorzystuje mniej logów systemowych i transakcyjnych zasoby.

DROP TABLE

Usuwa jedną lub więcej definicji tabeli i wszystkie dane, indeksy, wyzwalacze, ograniczenia, oraz pozwolenie specyfikacje tych tabel.

Jeśli chodzi o prędkość, różnica powinna być niewielka. A w każdym razie, jeśli nie potrzebujesz struktury tabeli w ogóle, na pewno użyć DROP.

 22
Author: daremon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:10:27

Myślę, że masz na myśli różnicę między DELETE TABLE a TRUNCATE TABLE.

DROP TABLE

Usuń tabelę z bazy danych.

DELETE TABLE

Bez warunku usuń wszystkie wiersze. Jeśli są wyzwalacze i referencje, to będzie to przetwarzane dla każdego wiersza. Również indeks będzie modyfikować, jeśli tam jeden.

TABELA TRUNCATE

Ustaw liczbę wierszy zero i bez logowania każdego wiersza. Że jest o wiele szybciej, jak inne oba.

 18
Author: Horcrux7,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:35:57

Żadna z tych odpowiedzi nie wskazuje na istotną różnicę w tych dwóch operacjach. Drop table to operacja, którą można cofnąć. nie można jednak wycofać przycięcia [można również wycofać "tabelę okrojenia"]. W ten sposób opuszczenie bardzo dużej tabeli może być bardzo kosztowne, jeśli jest wiele wierszy, ponieważ wszystkie muszą być zapisane w tymczasowej przestrzeni w przypadku, gdy zdecydujesz się ją cofnąć.

Zazwyczaj, jeśli chcę pozbyć się dużego stołu, będę obcinać to Rzuć to. W ten sposób dane będą nixowane bez rekordu, a tabela może zostać upuszczona, a spadek ten będzie bardzo tani, ponieważ żadne dane nie muszą być rejestrowane.

Ważne jest jednak, aby zaznaczyć, że truncate po prostu usuwa dane, pozostawiając tabelę, podczas gdy drop w rzeczywistości usunie dane i samą tabelę. (zakładając, że klucze obce nie wykluczają takiej akcji)

 9
Author: Nathan Feger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-03 23:04:24

TRUNCATE TABLE zachowuje wszystkie twoje stare indeksowanie i takie tam. DROP TABLE oczywiście pozbyłby się stołu i wymagałby od Ciebie odtworzenia go później.

 4
Author: Kevin Fairchild,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-06 14:46:23

Drop całkowicie usuwa tabelę, usuwając również definicję. Truncate opróżnia tabelę, ale nie pozbawia się definicji.

 3
Author: DMKing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:04:19

Obcinanie stołu opróżnia stół. Opuszczenie stołu usuwa go całkowicie. Każdy z nich będzie szybki, ale upuszczenie go prawdopodobnie będzie szybsze (w zależności od silnika bazy danych).

Jeśli już go nie potrzebujesz, upuść go, aby nie zaśmiecał twojego schematu.

 3
Author: Dan Udey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:04:27

DELETE TableA zamiast TRUNCATE TableA? Powszechnym błędnym przekonaniem jest to, że robią to samo. Nie więc. W rzeczywistości istnieje wiele różnic między nimi.

DELETE jest zalogowaną operacją na podstawie każdego wiersza. Oznacza to że usunięcie każdego wiersza jest rejestrowane i fizycznie usuwane.

Możesz usunąć dowolny wiersz, który nie będzie naruszał ograniczeń, pozostawiając klucz obcy lub inny kontraint na swoim miejscu.

TRUNCATE jest również operacją logowania, ale w inaczej. TRUNCATE rejestruje dealokację stron danych, w których dane istnieje. Dealokacja stron danych oznacza, że Twoje dane wiersze nadal istnieją w zakładkach danych, ale zakresy zostały oznaczone jako puste do ponownego użycia. To jest to, co sprawia, że TRUNCATE jest szybszą operacją do wykonania nad DELETE.

Nie można obcinać tabeli z obcym kluczem ograniczenia. Będziesz musiał usunąć contraints, obciąć tabeli, a następnie ponownie zastosować Kontrakty.

TRUNCATE zresetuje kolumny tożsamości do domyślnego ziarna wartość.

 3
Author: Raja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-05 19:58:39

Truncate usuwa wszystkie wiersze, ale nie samą tabelę, jest to zasadniczo równoważne usunięciu bez klauzuli where, ale zwykle szybsze.

 2
Author: mmaibaum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:04:07

Mam poprawkę do jednego z powyższych stwierdzeń... "truncate nie może być cofnięty"

Truncate można cofnąć. Istnieją przypadki, w których nie można wykonać przycięcia lub upuszczenia tabeli, na przykład gdy masz odniesienie do klucza obcego. W przypadku zadania, takiego jak Miesięczne raportowanie, prawdopodobnie po prostu upuściłbym tabelę, gdy już jej nie potrzebuję. Gdybym robił ten raport rollup częściej, prawdopodobnie zachowałbym zamiast tego tabelę i użyłbym truncate.

Mam nadzieję, że to pomoże, oto kilka więcej informacji, które powinieneś znaleźć przydatne...

Aby uzyskać więcej informacji, zapoznaj się z poniższym artykułem: http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx

Aby uzyskać więcej informacji na temat delete vs. truncate, zobacz ten artykuł: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx

Dzięki! Jeff

 2
Author: Jeff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:59:57

Tabela TRUNCATE jest funkcjonalnie identyczny jak polecenie DELETE bez Klauzula WHERE: both usuwa wszystkie wiersze w stół. Ale tabela TRUNCATE jest szybsze i zużywa mniej systemu i zasoby dziennika transakcji niż Usuń.

Polecenie DELETE usuwa wiersze pierwsze w czasie i rejestruje wpis w dziennik transakcji dla każdego usuniętego wiersza. TRUNCATE TABLE usuwa dane za pomocą dealokacja stron danych używanych do przechowuje dane tabeli, a jedynie strona dealokacje są rejestrowane w dziennik transakcji.

Tabela TRUNCATE usuwa wszystkie wiersze z tabeli, ale struktura tabeli i jej kolumny, ograniczenia, indeksy i tak dalej / align = "left" / Licznik używany przez tożsamość dla nowych wierszy jest resetowana do zalążek kolumny. Jeśli chcesz zachowaj licznik tożsamości, użyj Zamiast tego Usuń. Jeśli chcesz usunąć definicja tabeli i jej dane, użyj DROP TABLE statement.

Nie można użyć tabeli TRUNCATE na tabela / align = "left" / constraint; zamiast tego użyj DELETE oświadczenie bez klauzuli WHERE. Ponieważ tabela TRUNCATE nie jest zalogowana, nie może aktywować wyzwalacza.

Tabela TRUNCATE nie może być używana na tabele zindeksowane widok.

Z http://msdn.microsoft.com/en-us/library/aa260621(SQL. 80). aspx

 2
Author: Ricardo C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 01:12:41

W standardzie SQL, DROP table usuwa tabelę, a schemat table-TRUNCATE usuwa wszystkie wiersze.

 2
Author: hangy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-18 18:19:14

DROP Table

DROP TABLE [table_name];

Polecenie DROP służy do usuwania tabeli z bazy danych. Jest to komenda DDL. Wszystkie wiersze, indeksy i przywileje tabeli również zostaną usunięte. Operacji upuszczania nie można cofnąć.

Usuń tabelę

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

Polecenie DELETE jest poleceniem DML. Można go użyć do usunięcia wszystkich wierszy lub niektórych wierszy z tabeli na podstawie warunku określonego w klauzuli WHERE. Wykonywany jest za pomocą blokady wiersza, każdy wiersz w tabela jest zablokowana do usunięcia. Utrzymuje dziennik transakcji, więc jest wolniejszy niż TRUNCATE. Operacje usuwania można cofnąć.

TRUNCATE Table

TRUNCATE TABLE [table_name];

Polecenie TRUNCATE usuwa wszystkie wiersze z tabeli. Nie rejestruje usuwania każdego wiersza, zamiast tego rejestruje dealokację stron danych tabeli, co sprawia, że jest to szybsze niż usuwanie. Jest on wykonywany za pomocą blokady tabeli i cała tabela jest zablokowana w celu usunięcia wszystkich rekordów. Jest to komenda DDL. TRUNCATE operacji nie można cofnąć.

 2
Author: Optimizer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-06 05:37:33

Odpowiedzi tutaj pasują do pytania, ale odpowiem na pytanie, którego nie zadałeś. "Czy powinienem używać truncate czy delete?"Jeśli usuwasz wszystkie wiersze z tabeli, zazwyczaj będziesz chciał obciąć, ponieważ jest to o wiele szybsze. Dlaczego jest o wiele szybszy? Przynajmniej w przypadku Oracle resetuje znak high water. Jest to w zasadzie dereferencja danych i pozwala db Na ponowne wykorzystanie ich do czegoś innego.

 1
Author: Dan Coates,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:12:04

DELETE VS TRUNCATE

  1. Instrukcja DELETE usuwa wiersze po kolei i zapisuje wpis w transakcji Zaloguj dla każdego usuniętego wiersza. TRUNCATE TABLE usuwa dane poprzez dealokację danych strony Używane do przechowywania danych tabeli i zapisuje tylko dealokacje strony w dziennik transakcji
  2. możemy użyć WHERE klauzuli w DELETE ale w TRUNCATE nie można jej użyć
  3. gdy instrukcja DELETE jest wykonywana przy użyciu blokady wiersza, każdy wiersz tabeli jest zablokowany na usunięcie. TRUNCATE TABLE zawsze blokuje tabelę i stronę, ale nie każdy wiersz
  4. po wykonaniu instrukcji DELETE tabela może nadal zawierać puste strony.Jeśli operacja delete nie używa blokady tabeli, tabela (sterta) będzie zawierać wiele pustych stron. W przypadku Indeksów operacja delete może pozostawić puste strony, chociaż te
    strony będą szybko dealokowane przez proces czyszczenia tła
  5. TRUNCATE TABLE usuwa wszystkie wiersze z tabeli, ale strukturę tabeli i jej kolumny, ograniczenia, indeksy i tak dalej pozostają
  6. DELETE statement doesn ' t RESEED identity column but TRUNCATE statement RESEEDS the IDENTITY kolumna
  7. Nie Można używać TRUNCATE TABLE na stołach, które:
    1. są odwołane przez ograniczenie FOREIGN KEY. (Można obciąć tabelę, która ma klucz obcy, który się odwołuje.)
    2. udział w widoku indeksowanym.
    3. są publikowane za pomocą replikacji transakcyjnej lub replikacji merge
  8. TRUNCATE TABLE nie można aktywować WYZWALACZ, ponieważ operacja nie loguje poszczególnych usuwanie wierszy
 1
Author: Sasikiran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-05 01:29:55

Usuń

Polecenie DELETE służy do usuwania wierszy z tabeli. Klauzula WHERE może być używana tylko do usuwania niektórych wierszy. Jeśli nie podano warunku WHERE, wszystkie wiersze zostaną usunięte. Po wykonaniu operacji DELETE musisz Zatwierdź lub wycofaj transakcję, aby zmiana stała lub aby ją cofnąć.

TRUNCATE

TRUNCATE usuwa wszystkie wiersze z tabeli. Operacja nie może zostać cofnięta ... W związku z tym TRUCATE jest szybszy i nie użyj tyle miejsca co Usuń.

From: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

 0
Author: Pang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-11 00:40:23

Delete Statement

Usuń polecenie Usuń wiersze tabeli i zwróć ilość wierszy jest usuwana z table.in to oświadczenie, używamy klauzuli where do usunięcia danych z tabeli

  • polecenie Delete jest wolniejsze niż polecenie Truncate, ponieważ usuwa rekordy jeden po drugim

Twierdzenie Truncate

Instrukcja Truncate usuwa lub usuwa wszystkie wiersze z tabeli.

  • it is faster niż polecenie Delete, ponieważ usunęło wszystkie rekordy z tabeli
  • Instrukcja Truncate not return liczba wierszy jest usuwana z tabeli

Drop statement

Polecenie Drop usuwa wszystkie rekordy oraz strukturę tabeli

 0
Author: Zubair Saif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-24 17:39:10

Drop upuść całą tabelę i całą jej strukturę

Truncate usuń wszystkie wiersze z tabeli różni się od delete tym, że usuwa również indeksy wierszy

 0
Author: ZIA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-29 08:36:18