Подтвердить что ты не робот

Удалить все строки в таблице

Нормальный, я бы сделал delete * from XXX, но в этой таблице это очень медленно, у него нормальная длина составляет около 500 тыс. до 1 м строк (один из них является varbinary (MAX), если это mathers).

В основном им интересно узнать, есть ли быстрый способ emty в таблице всего содержимого, быстрее его удалить и воссоздать, а затем удалить содержимое с помощью инструкции delete sql

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

Im также надеется, что есть способ сделать это, потому что есть "умный" способ получить подсчет строк через sys.sysindexes, поэтому я надеюсь, что существует равный умный способ удаления контента

4b9b3361

Ответ 1

Truncate table быстрее, чем delete * from XXX. Delete медленный, потому что он работает по одной строке за раз. Есть несколько ситуаций, когда truncate не работает, о котором вы можете прочитать в MSDN.

Ответ 2

Как говорили другие, TRUNCATE TABLE намного быстрее, но у него есть некоторые ограничения (взяты из здесь):

Вы не можете использовать TRUNCATE TABLE для таблиц, которые:

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

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

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

Ответ 3

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

См. Справочное руководство по MySQL 5.1 для команд [ RENAME TABLE] [1] и [CREATE TABLE] [2].

RENAME TABLE tbl TO tbl_old;

CREATE TABLE tbl LIKE tbl_old;

DROP TABLE tbl_old; -- at your leisure

Этот подход может помочь свести к минимуму время простоя приложения.

Ответ 4

Я бы предложил использовать TRUNCATE TABLE, он быстрее и использует меньше ресурсов, чем DELETE FROM xxx

Вот ссылка статья MSDN