Разница между таблицей удаления и таблицей усечения?

StackOverflow https://stackoverflow.com/questions/135653

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

ОТПРАВИТЬ ТАБЛИЦУ

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

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

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

ОТПРАВИТЬ ТАБЛИЦУ

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

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

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

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

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

Ни один из этих ответов не указывает на важное различие между этими двумя операциями.Удаление таблицы — это операция, которую можно откатить. Однако откат невозможен. ['TRUNCATE TABLE' также можно откатить].Таким образом, удаление очень большой таблицы может оказаться очень дорогостоящим, если в ней много строк, поскольку все они должны быть записаны во временном пространстве на случай, если вы решите выполнить откат.

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

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

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

Таблица DROP

DROP TABLE [table_name];

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

УДАЛИТЬ таблицу

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

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

Таблица TRUNCATE

TRUNCATE TABLE [table_name];

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

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

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

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

УДАЛИТЬ TableA вместо TRUNCATE TableA?Распространенное заблуждение состоит в том, что они делают одно и то же.Не так.На самом деле между ними много различий.

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

Вы можете УДАЛИТЬ любую строку, которая не нарушает ограничение, оставив при этом внешний ключ или любое другое ограничение.

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

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

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

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

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

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

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

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

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

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

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

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

Таблица усечения удаляет все ряды из таблицы, но структура таблицы и ее столбцы, ограничения, индексы и так далее.Счетчик, используемый идентичностью для новых строк, сброшен в семя для колонны.Если вы хотите сохранить счетчик идентификации, вместо этого используйте Delete.Если вы хотите удалить определение таблицы и ее данные, используйте оператор Drop Table.

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

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

От http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspx

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

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

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

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

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

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

  • Оператор удаления работает медленнее, чем оператор Truncate, поскольку он удаляет записи одну за другой.

Обрезать заявление

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

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

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

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

УДАЛИТЬ

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

УСЕЧЕНИЕ

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top