Некоторые преимущества использования оператора TRUNCATE по сравнению с DELETE:
- Скорость выполнения. 2 TRUNCATE быстрее, так как не удаляет строки по отдельности, а просто освобождает всю таблицу сразу. 2 DELETE, особенно при удалении большого объёма данных, более медленная операция, так как строки удаляются поштучно и каждая операция фиксируется в журнале транзакций. 2
- Меньший объём журнала транзакций. 5 TRUNCATE записывает в журнал транзакций только данные об освобождении страниц, в то время как DELETE создаёт запись для каждой удалённой строки. 5
- Меньшее количество блокировок. 5 TRUNCATE всегда блокирует таблицу и страницу, но не каждую строку, в то время как DELETE применяет блокировку на уровне строк. 15
- Сброс счётчика автоинкремента. 24 TRUNCATE сбрасывает счётчик автоинкремента, начиная его заново с установленного значения (обычно с 1), в то время как DELETE не сбрасывает счётчик. 24
- Удаление всех строк из таблицы. 1 TRUNCATE удаляет все строки из таблицы, но структура таблицы и её столбцы, ограничения, индексы и т. д. остаются. 5
TRUNCATE предпочтительнее для быстрого удаления всех данных из таблицы, когда не требуется логировать каждую удалённую строку. 2 DELETE лучше использовать, когда нужно удалить только часть данных или когда нужно запускать триггеры. 2