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



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



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



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



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

458   5  

5 ответов:

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

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

вы не можете использовать усечение таблицы на таблицах, которые:

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

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

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

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

см. справочное руководство 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

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

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

вот связанные статья MSDN

Comments

    Ничего не найдено.