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

У меня также были серьезные проблемы с тестированием многопоточного кода. Затем я нашел действительно классное решение в «XUnit Test Patterns» Жерара Мезароса. Шаблон, который он описывает, называется Humble object.

В основном это описывает, как вы можете извлечь логику в отдельный, простой в тестировании компонент, который отделен от среды. После проверки этой логики вы можете проверить сложное поведение (многопоточность, асинхронное выполнение и т. Д.)

75
задан juan 25 September 2008 в 20:17
поделиться

15 ответов

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

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

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

См. эта статья MSDN для большего количества информации

96
ответ дан JoshL 7 November 2019 в 07:05
поделиться

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

1
ответ дан Dan Coates 7 November 2019 в 07:05
поделиться

В стандарте SQL таблица DROP удаляет таблицу, и схема таблицы - УСЕЧЕННЫЙ удаляет все строки.

2
ответ дан Marcus Adams 7 November 2019 в 07:05
поделиться

УДАЛЯЮТ

, команда DELETE используется для удаления строк из таблицы. Оператор Where может использоваться, чтобы только удалить некоторые строки. Если не, ГДЕ условие определяется, все строки будут удалены. После выполнения УДАЛИТЬ операции необходимо ФИКСИРОВАТЬ или ОТКАТЫВАТЬ транзакцию, чтобы делать изменение постоянным или отменить его.

УСЕЧЕННЫЙ

УСЕЧЕННЫЙ удаляет все строки из таблицы. Операция не может откатываться... По сути, TRUCATE быстрее и не использует столько же пространства отмены сколько УДАЛЕНИЕ.

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

0
ответ дан Pang 7 November 2019 в 07:05
поделиться

TRUNCATE TABLE функционально идентичен Оператору удаления без оператора Where: оба удаляют все строки в таблице. Но TRUNCATE TABLE быстрее и использует меньше системы и ресурсов журнала транзакций, чем УДАЛЯЮТ.

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

TRUNCATE TABLE удаляет все строки из таблицы, но структура таблицы и ее столбцы, ограничения, индексы и так далее остаются. Счетчик, используемый идентификационными данными для новых строк, сбрасывается к семени для столбца. Если Вы хотите сохранить счетчик идентификационных данных, использование УДАЛЯЮТ вместо этого. Если Вы хотите удалить определение таблицы и его данные, используйте оператор DROP TABLE.

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

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

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

2
ответ дан Ricardo C 7 November 2019 в 07:05
поделиться

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

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

Hope, которой это помогает, вот еще некоторая информация, которую необходимо найти полезным...

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

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

Спасибо! Jeff

2
ответ дан Jeff 7 November 2019 в 07:05
поделиться

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

2
ответ дан mmaibaum 7 November 2019 в 07:05
поделиться

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

3
ответ дан DMKing 7 November 2019 в 07:05
поделиться

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

, Если Вам больше не нужен он, отбросьте его так, это не загромождает Вашу схему.

3
ответ дан Dan Udey 7 November 2019 в 07:05
поделиться

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

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

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

10
ответ дан SolutionYogi 7 November 2019 в 07:05
поделиться

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

4
ответ дан Filip De Vos 7 November 2019 в 07:05
поделиться

Я думаю, что Вы подразумеваете, что различие между УДАЛЯЕТ ТАБЛИЦУ и TRUNCATE TABLE.

DROP TABLE

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

УДАЛЯЮТ ТАБЛИЦУ

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

TRUNCATE TABLE

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

20
ответ дан Horcrux7 7 November 2019 в 07:05
поделиться

ОТБРАСЫВАНИЕ и TRUNC делают разные вещи:

TRUNCATE TABLE

Удаляет все строки из таблицы, не регистрируя отдельные удаления строки. TRUNCATE TABLE подобен Оператору удаления без оператора Where; однако, TRUNCATE TABLE быстрее и использует меньше системы и ресурсов журнала транзакций.

DROP TABLE

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

, Насколько скорость обеспокоена, что различие должно быть небольшим. И так или иначе если Вам не нужна структура таблицы вообще, конечно, используйте ОТБРАСЫВАНИЕ.

25
ответ дан daremon 7 November 2019 в 07:05
поделиться

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

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

82
ответ дан ceejayoz 7 November 2019 в 07:05
поделиться

DELETE VS TRUNCATE

  1. Оператор DELETE удаляет строки по одной и записывает запись в транзакции {{1} } журнал для каждой удаленной строки. 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 не может активировать триггер, поскольку операция не регистрирует отдельные удаления строк
1
ответ дан 24 November 2019 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: