Разница между drop table и truncate table?

У меня есть несколько таблиц, которые я строю, как часть моего сводного отчета. Потом они мне совсем не нужны. Кто-то упомянул, чтобы обрезать их, так как это будет быстрее.

19 ответов


удаление записей из таблицы регистрирует каждое удаление и выполняет триггеры удаления для удаленных записей. Усечение-это более мощная команда, которая очищает таблицу без регистрации каждой строки. SQL Server запрещает усечение таблицы с внешними ключами, ссылающимися на нее, из-за необходимости проверки внешних ключей в каждой строке.

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

Если вы действительно хотите удалить таблицу определения а также данные, просто перетащите таблицы.

посмотреть эта статья MSDN дополнительная информация


DROP TABLE удаляет таблицу.

усеченная таблица опустошает ее, но оставляет ее структуру для будущих данных.


DROP и TRUNC делают разные вещи:

УСЕЧЬ ТАБЛИЦУ

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

DROP TABLE

удаляет одно или несколько определений таблиц и все данные, индексы, триггеры, ограничения и разрешения спецификации для этих таблиц.

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


Я думаю, что вы имеете в виду разницу между DELETE TABLE и TRUNCATE TABLE.

DROP TABLE

удалить таблицу из базы данных.

УДАЛИТЬ ТАБЛИЦУ

без условия удалить все строки. Если есть триггер и ссылки, то это будет процесс для каждой строки. Также индекс будет изменен, если он есть.

УСЕЧЬ ТАБЛИЦУ

установите количество строк равным нулю и без регистрации каждой строки. Что он намного быстрее, чем другие оба.


ни один из этих ответов не указывает на важное различие в этих двух операциях. Drop table-это операция, которую можно откатить. однако усечение не может быть откат ["усеченная таблица"также может быть откатана]. Таким образом, удаление очень большой таблицы может быть очень дорогим, если есть много строк, потому что все они должны быть записаны во временное пространство, если вы решите откатить его.

обычно, если я хочу избавиться от большого стола, я удалит его, потом бросьте его. Таким образом, данные будут уничтожены без записи, и таблицу можно будет удалить, и это падение будет очень недорогим, потому что нет необходимости записывать данные.

важно отметить, что усечение просто удаляет данные, оставляя таблицу, в то время как drop будет фактически удалять данные и саму таблицу. (предполагая, что внешние ключи не исключают такого действия)


усеченная таблица сохраняет все ваши старые индексации и прочее. DROP TABLE, очевидно, избавится от таблицы и потребует от вас воссоздать ее позже.


Drop полностью избавляется от таблицы, удаляя определение. Truncate опустошает таблицу, но не избавляется от определения.


усек стол пустеет стол. Удаление таблицы полностью удаляет ее. Любой из них будет быстрым, но его удаление, скорее всего, будет быстрее (в зависимости от вашего ядра СУБД).

Если он вам больше не нужен, отбросьте его, чтобы он не загромождал вашу схему.


удалить таблицы tablea вместо truncate таблицы tablea? Распространенное заблуждение состоит в том, что они делают то же самое. Не так. На самом деле между ними существует много различий.

DELETE-это регистрируемая операция для каждой строки. Это средство что удаление каждой строки регистрируется и физически удаляется.

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

TRUNCATE также регистрируется операция, но по-другому. TRUNCATE регистрирует освобождение страниц данных, в которых данные существует. Освобождение страниц данных означает, что ваши данные строки все еще существуют на страницах данных, но экстенты помечены как пустые для повторного использования. Это делает усечь быстрее операцию по удаление.

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

усечь сбросит столбцы идентификаторов семени по умолчанию значение.


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


У меня есть исправление для одного из заявлений выше... "усечение не может быть откатано"

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

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

пожалуйста см. следующую статью Для больше деталей: http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx

кроме того, для получения более подробной информации о удалить и обрезать, см. В этой статье: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx

спасибо! Джефф!--1-->


таблица усечения функционально идентично инструкции DELETE с no Предложение WHERE: оба удаляют все строки в таблица. Но усекать таблицы быстрее и использует меньше системы и ресурсы журнала транзакций, чем удалить.

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

усеченная таблица удаляет все строки из a таблице, но структура таблицы и ее столбцы, ограничения, индексы и так далее по-прежнему. Счетчик, используемый тож сбрасывается в семя для колонки. Если хочешь ... сохранить счетчик идентификаторов, использовать Вместо этого удалите. Если вы хотите удалить определение таблицы и данные, используйте Инструкция DROP TABLE.

вы не можете использовать усечение Стол на таблица, на которую ссылается внешний ключ ограничение; вместо этого используйте DELETE оператор без предложения WHERE. Поскольку усеченная таблица не регистрируется, он не может активировать триггер.

таблица усечения не может использоваться на участвуя таблицы в индексном вид.

С http://msdn.microsoft.com/en-us/library/aa260621(в SQL.80).аспн


в стандарте SQL DROP table удаляет таблицу, а схема таблицы-TRUNCATE удаляет все строки.


DROP Table

DROP TABLE [table_name];

команда Drop используется для удаления таблицы из базы данных. Это команда DDL. Все строки, индексы и привилегии таблицы также будут удалены. Откат операции DROP невозможен.

удалить таблицу

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

команда DELETE является командой DML. Его можно использовать для удаления всех строк или некоторых строк из таблицы на основе условия, указанного в предложении WHERE. Он выполняется используя блокировку строк, каждая строка в таблице блокируется для удаления. Он поддерживает журнал транзакций, поэтому он медленнее, чем усечение. Операции удаления можно откатить.

усечь таблицу

TRUNCATE TABLE [table_name];

команда TRUNCATE удаляет все строки из таблицы. Он не будет регистрировать удаление каждой строки, вместо этого он регистрирует освобождение страниц данных таблицы, что делает его быстрее, чем удалить. Он выполняется с помощью блокировки таблицы, и вся таблица блокируется для удаления всех записей. Это команда DDL. Операции усечения нельзя откатить.


ответы здесь совпадают с вопросом, но я собираюсь ответить на вопрос, который вы не задавали. "Должен ли я использовать truncate или delete?"Если вы удаляете все строки из таблицы, вы обычно хотите, чтобы усечь, так как это намного быстрее. Почему он намного быстрее? По крайней мере, в случае Oracle, он сбрасывает высокая вода знак. Это в основном разыменование данных и позволяет БД использовать его для чего-то другого.


УДАЛИТЬ VS УСЕЧЬ

  1. на DELETE оператор удаляет строки по одной и записывает запись в транзакцию журнал для каждой удаленной строки. TRUNCATE TABLE удаляет данные, освобождая данные страницы, используемые для хранения табличных данных и записи только освобождений страниц в журнал транзакций
  2. можно использовать WHERE в пункте DELETE а в TRUNCATE вы не можете использовать
  3. когда DELETE оператор выполняется с помощью блокировки строки, каждая строка в таблице заблокирована на удаление. TRUNCATE TABLE всегда блокирует таблицу и страницу, но не каждую строку
  4. после DELETE выполняется инструкция, таблица все еще может содержать пустые страницы.Если операция удаления не использует блокировку таблицы, таблица (куча) будет содержать много пустых страницы. Для индексов операция удаления может оставить пустые страницы, хотя эти
    страницы будут освобождены быстро с помощью процесса очистки фона
  5. TRUNCATE TABLE удаляет все строк из таблицы, но структура таблицы и ее столбцов, ограничения, индексы и так далее остаются
  6. DELETE заявление не RESEED столбец идентификаторов, но TRUNCATE сообщении RESEEDS в IDENTITY колонки
  7. вы не можете использовать TRUNCATE TABLE в таблицах,:
    1. ссылаются на FOREIGN KEY ограничения. (Вы можете усечь таблицу, которая имеет внешний ключ, который ссылается на себя.)
    2. участие в индексированном представлении.
    3. а Опубликовано с помощью репликации транзакций или репликации слиянием
  8. TRUNCATE TABLE не удается активировать триггер, так как операция не регистрирует отдельные удаление строк

удалить

команда DELETE используется для удаления строк из таблицы. Предложение WHERE может использоваться только для удаления некоторых строк. Если условие WHERE не указано, все строки будут удалены. После выполнения операции удаления необходимо Зафиксируйте или откат транзакции, чтобы сделать изменение постоянным или отменить его.

усечь

TRUNCATE удаляет все строки из таблицы. Откат операции невозможен ... Как таковой, TRUCATE быстрее и не использует столько пространства отмены, сколько удаления.

от: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands


Удалить Заявление

инструкция Delete удалить строки таблицы и вернуть количество строк удаляется из таблицы.в этом операторе мы используем предложение where для удаления данных из таблицы

  • оператор Delete медленнее, чем оператор Truncate, потому что он удалил записи один за другим

Инструкция Truncate

инструкция Truncate удалена или удалена все строки из таблицы.

  • это быстрее, чем оператор Delete, потому что он удалил все записи из таблицы
  • оператор усечения не возвращает no строк, которые удаляются из таблицы

Drop statement

оператор Drop удалил все записи, а также структуру таблицы


Drop отбросьте всю таблицу и всю ее структуру

усечь удалить все строки из таблицы он отличается от delete тем, что он также удаляет индексы строк