Mam kilka tabel, które tworzę w ramach pakietu zbiorczego raportów. W ogóle ich potem nie potrzebuję. Ktoś wspomniał, że ma je skracać, ponieważ byłoby to szybsze.
sql
sql-server
sybase
Brian G.
źródło
źródło
Odpowiedzi:
Usunięcie rekordów z tabeli rejestruje każde usunięcie i wykonuje wyzwalacze usuwania dla usuniętych rekordów. Truncate to potężniejsze polecenie, które opróżnia tabelę bez rejestrowania każdego wiersza. SQL Server zapobiega obcięciu tabeli z odwołującymi się do niej kluczami obcymi ze względu na konieczność sprawdzenia kluczy obcych w każdym wierszu.
Obcinanie jest zwykle ultraszybkie, idealne do czyszczenia danych z tabeli tymczasowej. Zachowuje strukturę tabeli do wykorzystania w przyszłości.
Jeśli rzeczywiście chcesz usunąć definicje tabel, a także dane, po prostu usuń tabele.
Zobacz ten artykuł MSDN, aby uzyskać więcej informacji
źródło
DROP TABLE usuwa tabelę.
TRUNCATE TABLE opróżnia go, ale pozostawia jego strukturę dla przyszłych danych.
źródło
DROP i TRUNC robią różne rzeczy:
TABELA PRAWIDŁOWA
DROP TABLE
Jeśli chodzi o prędkość, różnica powinna być niewielka. Zresztą, jeśli w ogóle nie potrzebujesz struktury tabeli, z pewnością użyj DROP.
źródło
Myślę, że masz na myśli różnicę między DELETE TABLE a TRUNCATE TABLE.
DROP TABLE
USUŃ TABELĘ
TABELA PRAWIDŁOWA
źródło
set the row count zero
w rzeczywistości ustawia wartość tożsamości z powrotem na początkową wartość tożsamości.Ż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 cofnąćoperacjiobcinania[„TRUNCATE TABLE” może być również wycofana]. W ten sposób upuszczenie bardzo dużej tabeli może być bardzo kosztowne, jeśli jest wiele wierszy, ponieważ wszystkie muszą być zapisane w tymczasowym miejscu na wypadek, gdybyś zdecydował się ją wycofać.Zwykle, jeśli chcę pozbyć się dużego stołu, obcinam go, a następnie upuszczam. W ten sposób dane zostaną usunięte bez zapisu, a tabela może zostać usunięta, a to upuszczenie będzie bardzo niedrogie, ponieważ żadne dane nie muszą być rejestrowane.
Należy jednak podkreślić, że obcięcie powoduje po prostu usunięcie danych i opuszczenie tabeli, podczas gdy drop w rzeczywistości usunie dane i samą tabelę. (zakładając, że klucze obce nie wykluczają takiej akcji)
źródło
DROP
to w zasadzie tylko a,TRUNCATE
po którym następuje usunięcie metadanych tabeli z tabel systemowych. Zobacz to pytanie tutajDROP Table
DROP TABLE [table_name];
DELETE Table
DELETE FROM [table_name] WHERE [condition]; DELETE FROM [table_name];
Tabela TRUNCATE
TRUNCATE TABLE [table_name];
źródło
TRUNCATE TABLE zachowuje wszystkie stare indeksy i tak dalej. DROP TABLE oczywiście pozbyłby się stołu i wymagałby ponownego utworzenia go później.
źródło
Drop całkowicie pozbywa się stołu, usuwając również definicję. Obetnij opróżnia tabelę, ale nie usuwa definicji.
źródło
Obcięcie tabeli powoduje opróżnienie tabeli. Usunięcie tabeli powoduje jej całkowite usunięcie. 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ł schematu.
źródło
USUNĄĆ TableA zamiast TRUNCATE TableA? Powszechnym błędem jest przekonanie, że robią to samo. Bynajmniej. W rzeczywistości istnieje wiele różnic między nimi.
DELETE to operacja rejestrowana na podstawie 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ł ograniczenia, pozostawiając klucz obcy lub inne ograniczenie na miejscu.
TRUNCATE jest również operacją zarejestrowaną, ale w inny sposób. TRUNCATE rejestruje cofnięcie przydziału stron danych, na których istnieją dane. Cofnięcie alokacji stron danych oznacza, że wiersze danych nadal istnieją na stronach danych, ale zakresy zostały oznaczone jako puste do ponownego wykorzystania. To sprawia, że TRUNCATE jest szybszą operacją do wykonania niż DELETE.
Nie można TRUNCATE tabeli, która ma ograniczenia klucza obcego. Będziesz musiał usunąć ograniczenia, TRUNKOWAĆ stół i ponownie zastosować ograniczenia.
TRUNCATE zresetuje wszystkie kolumny tożsamości do domyślnej wartości inicjatora.
źródło
truncate usuwa wszystkie wiersze, ale nie samą tabelę, jest zasadniczo równoważne z usuwaniem bez klauzuli gdzie, ale zwykle jest szybsze.
źródło
Mam poprawkę do jednego z powyższych stwierdzeń… „Nie można wycofać obcięcia”
Obcięcie można cofnąć. Istnieją przypadki, w których nie można wykonać obcinania lub usuwania tabeli, na przykład w przypadku odwołania do klucza obcego. W przypadku zadania, takiego jak miesięczne raportowanie, prawdopodobnie po prostu upuściłbym tabelę, gdy już go nie potrzebowałem. Gdybym częściej wykonywał ten zestawienie raportów, prawdopodobnie zamiast tego zachowałbym tabelę i użyłbym obcięcia.
Mam nadzieję, że to pomoże, oto kilka dodatkowych informacji, które powinny okazać się przydatne ...
Więcej informacji można znaleźć w następującym artykule: http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx
Więcej informacji na temat usuwania i obcięcia można znaleźć w tym artykule: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx
Dzięki! Jeff
źródło
Z http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspx
źródło
W standardzie SQL DROP table usuwa tabelę, a schemat tabeli - TRUNCATE usuwa wszystkie wiersze.
źródło
Odpowiedzi tutaj pasują do pytania, ale odpowiem na pytanie, którego nie zadałeś. „Powinienem użyć obcinania czy usuwania?” Jeśli usuwasz wszystkie wiersze z tabeli, zazwyczaj będziesz chciał obciąć, ponieważ jest to znacznie szybsze. Dlaczego jest dużo szybszy? Przynajmniej w przypadku Oracle, resetuje znak wysokiego poziomu . Jest to po prostu wyłuskiwanie danych i pozwala db na ich ponowne wykorzystanie do czegoś innego.
źródło
USUŃ VS TRUNCATE
DELETE
Oświadczenie usuwa rzędach jeden na raz i rejestruje wpis w dzienniku transakcji dla każdego usuniętego wiersza.TRUNCATE TABLE
usuwa dane poprzez zwalnianie przydziałów stron danych używanych do przechowywania danych tabeli i rejestruje tylko zwolnienia stron w dzienniku transakcjiWHERE
klauzuli in,DELETE
aleTRUNCATE
nie możesz jej użyćDELETE
instrukcja jest wykonywana przy użyciu blokady wiersza, każdy wiersz w tabeli jest zablokowany do usunięcia.TRUNCATE TABLE
zawsze blokuje tabelę i stronę, ale nie każdy wierszDELETE
instrukcji tabela może nadal zawierać puste strony.Jeśli operacja usuwania nie używa blokady tabeli, tabela (sterta) będzie zawierała wiele pustych stron. W przypadku indeksów operacja usuwania może pozostawić puste strony, chociaż testrony zostaną szybko cofnięte przez proces czyszczenia w tle
TRUNCATE TABLE
usuwa wszystkie wiersze z tabeli, ale struktura tabeli i jej kolumny, ograniczenia, indeksy itp. pozostająDELETE
oświadczenie nieRESEED
kolumnę tożsamości, aleTRUNCATE
oświadczenie kolumnyRESEEDS
IDENTITY
TRUNCATE TABLE
na stołach, które:FOREIGN KEY
ograniczenie. (Możesz obciąć tabelę, która ma klucz obcy, który odwołuje się do siebie).TRUNCATE TABLE
nie można aktywować wyzwalacza, ponieważ operacja nie rejestruje usuwania pojedynczych wierszyźródło
Upuść cały stół i całą jego strukturę
obcinaj usuń wszystkie wiersze z tabeli różni się od usuwania tym, że usuwa również indeksy wierszy
źródło
Usuń instrukcję
Instrukcja Usuń usuń wiersze tabeli i zwróć liczbę wierszy jest usuwana z tabeli. W tej instrukcji używamy klauzuli where do usunięcia danych z tabeli
Instrukcja obcinania
Instrukcja obcięcia Usunięto lub usunięto wszystkie wiersze z tabeli.
Instrukcja upuść
Instrukcja Drop usunęła wszystkie rekordy, a także strukturę tabeli
źródło
Od: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
źródło