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

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

Ответы [ 19 ]

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

TRUNCATE TABLE функционально идентичен инструкции DELETE без Предложение WHERE: оба удаляют все строки в стол. Но TRUNCATE TABLE - это быстрее и использует меньше системы и ресурсы журнала транзакций, чем DELETE.

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

TRUNCATE TABLE удаляет все строки из таблица, но структура таблицы и ее столбцы, ограничения, индексы и т. д. на остаются. Счетчик, используемый идентичность для новых строк сбрасывается на семя для колонны. Если хотите сохранить счетчик идентичности, использовать УДАЛИТЬ вместо этого. Если вы хотите удалить определение таблицы и ее данные, используйте Оператор DROP TABLE.

Вы не можете использовать TRUNCATE TABLE на таблица, на которую ссылается FOREIGN KEY ограничение; вместо этого используйте DELETE заявление без предложения WHERE. Поскольку TRUNCATE TABLE не зарегистрировано, он не может активировать триггер.

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

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

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

У меня есть исправление для одного из приведенных выше утверждений ... "усечение не может быть отменено"

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

Надеюсь, это поможет, вот еще некоторая информация, которая вам может пригодиться ...

Пожалуйста, смотрите следующую статью для более подробной информации: http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx

Кроме того, для получения более подробной информации об удалении и усечении, см. Эту статью: http://www.sql -server-performance.com / чаво / delete_truncate_difference_p1.aspx

Спасибо! Джефф

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

truncate удаляет все строки, но не саму таблицу, это по сути эквивалентно удалению без предложения where, но обычно быстрее.

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

В стандарте SQL таблица DROP удаляет таблицу, а схема таблицы - TRUNCATE удаляет все строки.

1 голос
/ 07 апреля 2010

УДАЛИТЬ ПРОТИВ TRUNCATE

  1. Оператор DELETE удаляет строки по одной за раз и записывает запись в транзакции журнал для каждой удаленной строки. TRUNCATE TABLE удаляет данные, освобождая их страницы, используемые для хранения данных таблицы и записи только освобождения страниц в журнал транзакций
  2. Мы можем использовать предложение WHERE в DELETE, но в TRUNCATE вы не можете использовать его
  3. Когда оператор DELETE выполняется с использованием блокировки строк, каждая строка в таблице блокируется для удаления. TRUNCATE TABLE всегда блокирует таблицу и страницу, но не каждую строку
  4. После выполнения оператора DELETE таблица может содержать пустые страницы. Операция удаления не использует блокировку таблицы, таблица (куча) будет содержать много пустых страницы. Для индексов операция удаления может оставить пустые страницы, хотя эти
    страницы будут быстро освобождены в процессе фоновой очистки
  5. TRUNCATE TABLE удаляет все строки из таблицы, но структуру таблицы и ее столбцы, ограничения, индексы и т. д. остаются
  6. DELETE оператор не RESEED идентификатор столбца, но TRUNCATE оператор RESEEDS IDENTITY столбец
  7. Вы не можете использовать TRUNCATE TABLE для таблиц, которые:
    1. На них ссылается ограничение FOREIGN KEY. (Вы можете усечь таблицу, которая имеет внешний ключ, который ссылается на себя.)
    2. Участвовать в индексированном представлении.
    3. Публикуются с использованием репликации транзакций или репликации слиянием
  8. TRUNCATE TABLE не может активировать триггер, потому что операция не регистрирует отдельный удаление строк
1 голос
/ 26 сентября 2008

Ответы здесь совпадают с вопросом, но я собираюсь ответить на вопрос, который вы не задавали. "Должен ли я использовать усечение или удалить?" Если вы удаляете все строки из таблицы, вы, как правило, хотите усечь, так как это намного быстрее. Почему это намного быстрее? По крайней мере, в случае Oracle, он сбрасывает максимальную отметку . Это в основном разыменование данных и позволяет БД повторно использовать их для чего-то другого.

1 голос
/ 24 марта 2018

Удалить заявление

Оператор Delete удаляет строки таблицы и возвращает количество строк, удаляемых из таблицы. В этом операторе мы используем выражение where для удаления данных из таблицы

  • Оператор удаления медленнее, чем оператор усечения, потому что он удаляет записи одну за другой

Сокращенное утверждение

Оператор усечения Удалил или удалил все строки из таблицы.

  • Это быстрее, чем оператор Delete, потому что он удалил все записи из таблицы
  • Оператор усечения не возвращает количество удаленных строк из таблицы

Выписка из списка

Оператор удаления удаляет все записи, а также структуру таблицы

0 голосов
/ 29 марта 2018

Капля отбросить всю таблицу и всю ее структуру

усечение удалить все строки из таблицы отличается от delete тем, что он также удаляет индексы строк

0 голосов
/ 03 декабря 2008

DELETE

Команда DELETE используется для удаления строк из таблицы. Предложение WHERE может использоваться только для удаления некоторых строк. Если условие WHERE не указано, все строки будут удалены. После выполнения операции УДАЛИТЬ вам нужно COMMIT или ROLLBACK транзакция, чтобы сделать изменение постоянным или отменить его.

TRUNCATE

TRUNCATE удаляет все строки из таблицы. Операция не может быть отменена ... Таким образом, TRUCATE работает быстрее и не использует столько места для отмены, сколько DELETE.

От: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

...