Ответ 1
Truncate table
быстрее, чем delete * from XXX
. Delete
медленный, потому что он работает по одной строке за раз. Есть несколько ситуаций, когда truncate не работает, о котором вы можете прочитать в MSDN.
Нормальный, я бы сделал delete * from XXX
, но в этой таблице это очень медленно, у него нормальная длина составляет около 500 тыс. до 1 м строк (один из них является varbinary (MAX), если это mathers).
В основном им интересно узнать, есть ли быстрый способ emty в таблице всего содержимого, быстрее его удалить и воссоздать, а затем удалить содержимое с помощью инструкции delete sql
Причина, по которой я не хочу воссоздать таблицу, состоит в том, что ее сильно используемая и удаленная/воссозданная я предполагаю, что она уничтожит индексы и статистику, собранные сервером sql
Im также надеется, что есть способ сделать это, потому что есть "умный" способ получить подсчет строк через sys.sysindexes, поэтому я надеюсь, что существует равный умный способ удаления контента
Truncate table
быстрее, чем delete * from XXX
. Delete
медленный, потому что он работает по одной строке за раз. Есть несколько ситуаций, когда truncate не работает, о котором вы можете прочитать в MSDN.
Как говорили другие, TRUNCATE TABLE
намного быстрее, но у него есть некоторые ограничения (взяты из здесь):
Вы не можете использовать TRUNCATE TABLE для таблиц, которые:
- ссылаются на ограничение FOREIGN KEY. (Вы можете обрезать таблицу с внешним ключом, который ссылается на себя.)
- Участвовать в индексированном представлении.
- публикуются с использованием репликации транзакций или репликации слияния.
Для таблиц с одной или несколькими из этих характеристик вместо этого используйте инструкцию DELETE.
Самый большой недостаток заключается в том, что если в таблице, которую вы пытаетесь опорожнить, есть внешние ключи, указывающие на нее, то вызов truncate не будет выполнен.
Вы можете переименовать таблицу, о которой идет речь, создать таблицу с идентичной схемой, а затем отбросить исходную таблицу в свободное время.
См. Справочное руководство по 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
Этот подход может помочь свести к минимуму время простоя приложения.
Я бы предложил использовать TRUNCATE TABLE, он быстрее и использует меньше ресурсов, чем DELETE FROM xxx
Вот ссылка статья MSDN