Профессионалы и недостатки УСЕЧЕННЫХ по сравнению с УДАЛЯЮТ ИЗ

Мог кто-то давать мне быстрый обзор за и против использования следующих двух операторов:

TRUNCATE TABLE dbo.MyTable

по сравнению с

DELETE FROM dbo.MyTable

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

59
задан Lukasz Szozda 10 August 2017 в 16:51
поделиться

4 ответа

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

Однако, если вы находитесь в транзакции и хотите иметь возможность «отменить» это удаление, вам необходимо использовать УДАЛИТЬ ИЗ , что дает возможность отката.

РЕДАКТИРОВАТЬ: Обратите внимание, что приведенное выше неверно для SQL Server (но применимо к Oracle). В SQL Server можно выполнить откат операции усечения, если вы находитесь внутри транзакции и транзакция не была зафиксирована. С точки зрения SQL Server, одно ключевое различие между DELETE FROM и TRUNCATE заключается в this : Оператор DELETE удаляет строки по одной и записывает запись в журнал транзакций для каждой удаленной строки. TRUNCATE TABLE удаляет данные, освобождая страницы данных, используемые для хранения данных таблицы, и записывает в журнал транзакций только освобожденные страницы. "

Другими словами, во время TRUNCATE ведется меньше журнала, потому что в журнале транзакций записывается только освобождение страниц, тогда как при DELETE FROM записывается удаление каждой строки. Это одна из причин, по которой TRUNCATE работает молниеносно.

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

РЕДАКТИРОВАТЬ 2: Другим ключевым моментом является то, что TRUNCATE TABLE сбросит вашу личность до начального значения, тогда как DELETE FROM продолжит увеличение с того места, где оно было остановлено. Ссылка: ответ Бена Робинсона.

83
ответ дан 24 November 2019 в 18:10
поделиться

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

DELETE FROM регистрирует каждую удаляемую строку в журналах транзакций, поэтому операция занимает некоторое время и приводит к значительному увеличению количества журналов транзакций. Плюс в том, что при необходимости операцию можно отменить.

4
ответ дан 24 November 2019 в 18:10
поделиться

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

46
ответ дан 24 November 2019 в 18:10
поделиться

truncate не ведет журналирования, delete - делает, поэтому, если у вас тонна записей, ваш журнал транзакций огромен

-2
ответ дан 24 November 2019 в 18:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: