Разница между складным столом и усечь таблицу?


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

19 62

19 ответов:

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

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

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

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

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

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

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

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

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

DROP TABLE

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

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

Я думаю, что вы имеете в виду разницу между удалить таблицу и усечь таблицу.

DROP TABLE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

пожалуйста, обратитесь к следующей статье для получения более подробной информации: http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx

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

спасибо! Джефф

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

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

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

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

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

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

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

DROP Table

DROP TABLE [table_name];

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

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

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

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

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

TRUNCATE TABLE [table_name];

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

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

УДАЛИТЬ ПРОТИВ УСЕЧЕНИЯ

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

удалить

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

усечь

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

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

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

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

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

Инструкция Truncate

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

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

Drop statement

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

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

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