Поделиться через


Удаление всех строк с помощью инструкции TRUNCATE TABLE

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

По сравнению с инструкцией DELETE инструкция TRUNCATE TABLE обладает следующими преимуществами.

  • Для журнала транзакций используется меньшее количество памяти.
    Инструкция DELETE производит удаление по одной строке и заносит в журнал транзакций запись для каждой удаляемой строки. Инструкция TRUNCATE TABLE удаляет данные, освобождая страницы данных, используемые для хранения табличных данных, и записывает в журнал транзакций только данные об освобождении страниц.
  • Обычно используется меньшее количество блокировок.
    Если инструкция DELETE выполняется с блокировкой строк, для удаления блокируется каждая строка таблицы. Инструкция TRUNCATE TABLE всегда блокирует таблицу и страницу, но не каждую строку.
  • Все без исключения нулевые страницы остаются в таблице.
    После выполнения инструкции DELETE в таблице могут все еще оставаться пустые страницы. Например, пустые страницы в куче не могут быть освобождены, по крайней мере, без монопольной блокировки таблицы (LCK_M_X). Если операция удаления не использует блокировку таблицы, таблица (куча) будет содержать множество пустых страниц. Для индексов операция удаления может оставлять пустые страницы, хотя эти страницы будут быстро освобождены в процессе фоновой очистки.

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

Усечение больших таблиц

Microsoft SQL Server 2005 вводит возможность удаления или усечения таблиц, имеющих более 128 кластеров страниц, без удержания одновременных блокировок на всех экстентах, необходимых для удаления. Дополнительные сведения см. в разделе Удаление и повторная сборка больших объектов.

Примеры

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

USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount 
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount 
FROM HumanResources.JobCandidate;
GO

См. также

Основные понятия

Удаление строк с помощью инструкции DELETE
Удаление строк в результирующих наборах
Ограничение удаляемых строк с помощью предложения TOP

Другие ресурсы

DROP TABLE (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005