Разница между удаленной таблицей и усеченной таблицей? - PullRequest
72 голосов
/ 26 сентября 2008

У меня есть несколько таблиц, которые я строю как часть моего накопительного отчета. Я не нуждаюсь в них потом вообще. Кто-то упомянул об их усечении, так как это будет быстрее.

Ответы [ 19 ]

92 голосов
/ 26 сентября 2008

Удаление записей из таблицы регистрирует каждое удаление и выполняет триггеры удаления для удаленных записей. Truncate - более мощная команда, которая очищает таблицу, не регистрируя каждую строку. SQL Server не позволяет вам усекать таблицу с внешними ключами, ссылающимися на нее, из-за необходимости проверять внешние ключи в каждой строке.

Усечение обычно выполняется очень быстро, идеально подходит для очистки данных из временной таблицы. Он сохраняет структуру таблицы для будущего использования.

Если вы действительно хотите удалить таблицу определения , а также данные, просто отбросьте таблицы.

См. эту статью MSDN для получения дополнительной информации

80 голосов
/ 26 сентября 2008

DROP TABLE удаляет таблицу.

TRUNCATE TABLE очищает его, но оставляет свою структуру для будущих данных.

24 голосов
/ 26 сентября 2008

DROP и TRUNC делают разные вещи:

СТОЛ TRUNCATE

Удаляет все строки из таблицы без регистрация отдельных удалений строк. TRUNCATE TABLE похож на Оператор DELETE без предложения WHERE; однако TRUNCATE TABLE работает быстрее и использует меньше системы и журнала транзакций ресурсы.

ТАБЛИЦА КАПЛИ

Удаляет одно или несколько определений таблиц. и все данные, индексы, триггеры, ограничения и разрешение спецификации для этих таблиц.

Что касается скорости, разница должна быть небольшой. В любом случае, если вам вообще не нужна структура таблицы, обязательно используйте DROP.

18 голосов
/ 26 сентября 2008

Я думаю, что вы имеете в виду разницу между DELETE TABLE и TRUNCATE TABLE.

ТАБЛИЦА КАПЛИ

удалить таблицу из базы данных.

УДАЛИТЬ СТОЛ

без условия удалить все строки. Если есть триггер и ссылки, это будет обрабатываться для каждой строки. Также индекс будет изменен, если он есть.

СТОЛ TRUNCATE

установить количество строк равным нулю и без регистрации каждой строки. Это намного быстрее, чем другие оба.

10 голосов
/ 26 сентября 2008

Ни один из этих ответов не указывает на важное различие в этих двух операциях. Удаление таблицы - это операция, которую можно откатить. Однако откат нельзя откатить [Можно также откатить 'СТОЛ TRUNCATE']. Таким образом, удаление очень большой таблицы может быть очень дорогим, если имеется много строк, потому что все они должны быть записаны во временное пространство на случай, если вы решите откатить ее.

Обычно, если я хочу избавиться от большой таблицы, я ее обрезаю, а затем отбрасываю. Таким образом, данные будут зафиксированы без записи, и таблица может быть удалена, и это удаление будет очень недорогим, потому что данные не нужно записывать.

Важно отметить, что усечение просто удаляет данные, покидая таблицу, тогда как удаление фактически удаляет данные и саму таблицу. (при условии, что внешние ключи не исключают такого действия)

4 голосов
/ 26 сентября 2008

TRUNCATE TABLE сохраняет всю вашу старую индексацию и еще много чего. Очевидно, что DROP TABLE избавится от таблицы и потребует от вас ее воссоздания позже.

3 голосов
/ 06 декабря 2017

DROP Table

DROP TABLE [table_name];

Команда DROP используется для удаления таблицы из базы данных. Это команда DDL. Все строки, индексы и привилегии таблицы также будут удалены. Операция DROP не может быть отменена.

УДАЛИТЬ Таблица

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

Команда DELETE является командой DML. Его можно использовать для удаления всех строк или некоторых строк из таблицы на основе условия, указанного в предложении WHERE. Он выполняется с использованием блокировки строк, каждая строка в таблице заблокирована для удаления. Он поддерживает журнал транзакций, поэтому он работает медленнее, чем TRUNCATE. Операции DELETE можно откатить.

Таблица TRUNCATE

TRUNCATE TABLE [table_name];

Команда TRUNCATE удаляет все строки из таблицы. Он не будет регистрировать удаление каждой строки, вместо этого он регистрирует освобождение страниц данных таблицы, что делает его быстрее, чем DELETE. Он выполняется с использованием блокировки таблицы, и вся таблица блокируется для удаления всех записей. Это команда DDL. Операции TRUNCATE не могут быть отменены.

3 голосов
/ 26 сентября 2008

Усечение таблицы очищает таблицу. Удаление таблицы полностью удаляет ее. Любой из них будет быстрым, но его удаление, вероятно, будет быстрее (в зависимости от вашей базы данных).

Если он вам больше не нужен, отбросьте его, чтобы он не загромождал вашу схему.

3 голосов
/ 26 сентября 2008

Drop полностью избавляется от таблицы, удаляя определение. Усечение очищает таблицу, но не избавляется от определения.

3 голосов
/ 05 октября 2013

УДАЛИТЬ TableA вместо TRUNCATE TableA? Распространенным заблуждением является то, что они делают то же самое. Не так. На самом деле между ними много различий.

УДАЛЕНИЕ - это занесенная в журнал операция для каждой строки. Это означает что удаление каждой строки регистрируется и физически удаляется.

Вы можете УДАЛИТЬ любую строку, которая не будет нарушать ограничение, оставляя внешний ключ или любое другое ограничение на месте.

TRUNCATE - это также зарегистрированная операция, но другим способом. TRUNCATE регистрирует освобождение страниц данных, в которых данные существует. Освобождение страниц данных означает, что ваши данные строки на самом деле существуют на страницах данных, но экстенты были помечены как пустые для повторного использования. Это то, что делает TRUNCATE более быстрой операцией, выполняемой через DELETE.

Вы не можете TRUNCATE таблицы, которая имеет какой-либо внешний ключ ограничения. Вы должны будете удалить ограничения, TRUNCATE таблицы, и повторно примените ограничения.

TRUNCATE сбрасывает все столбцы идентификаторов в начальное число по умолчанию значение.

...