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

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

вы можете получить ответ от stackoverflow.com/questions/2012974/…

php 11.01.2014 09:49

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

Emilio Nicolás 03.12.2014 15:15
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
80
2
195 683
19
Перейти к ответу Данный вопрос помечен как решенный

Ответы 19

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

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

Чувак, это гораздо больше, чем ты знаешь;)

David Aldridge 26.09.2008 17:51

Это ключевое отличие.

ceejayoz 26.09.2008 23:42

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

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

Steven Murawski 26.09.2008 01:13

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

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

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

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

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

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

ТАБЛИЦА ПАРАМЕТРОВ

remove the table from the database.

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

without a condition delete all rows. If there are trigger and references then this will process for every row. Also a index will be modify if there one.

УРЕЗАТЬ ТАБЛИЦУ

set the row count zero and without logging each row. That it is many faster as the other both.

set the row count zero фактически устанавливает значение идентификатора обратно к начальному значению идентификатора.

Filip De Vos 06.10.2011 18:45
Ответ принят как подходящий

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

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

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

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

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

Jim 26.09.2008 00:26
Миф о том, что DROP и TRUNCATE TABLE не регистрируются. Just an additional two cents.
John K. N. 08.12.2015 17:01

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

УРЕЗАТЬ ТАБЛИЦУ

Removes all rows from a table without logging the individual row deletions. TRUNCATE TABLE is similar to the DELETE statement with no WHERE clause; however, TRUNCATE TABLE is faster and uses fewer system and transaction log resources.

ТАБЛИЦА ПАРАМЕТРОВ

Removes one or more table definitions and all data, indexes, triggers, constraints, and permission specifications for those tables.

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

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

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

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

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

Это не совсем правильно, TRUNCATE можно откатить в смысле BEGIN TRANSACTION, TRUNCATE TABLE, ROLLBACK, но не в смысле «восстановить журналы транзакций». Он регистрирует освобождение страниц.

Mark Sowul 08.12.2011 04:57

-1 DROP - это просто TRUNCATE, за которым следует удаление метаданных таблицы из системных таблиц. См. Этот вопрос здесь

Martin Smith 11.02.2012 21:07

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

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

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

TRUNCATE TABLE is functionally identical to DELETE statement with no WHERE clause: both remove all rows in the table. But TRUNCATE TABLE is faster and uses fewer system and transaction log resources than DELETE.

The DELETE statement removes rows one at a time and records an entry in the transaction log for each deleted row. TRUNCATE TABLE removes the data by deallocating the data pages used to store the table's data, and only the page deallocations are recorded in the transaction log.

TRUNCATE TABLE removes all rows from a table, but the table structure and its columns, constraints, indexes and so on remain. The counter used by an identity for new rows is reset to the seed for the column. If you want to retain the identity counter, use DELETE instead. If you want to remove table definition and its data, use the DROP TABLE statement.

You cannot use TRUNCATE TABLE on a table referenced by a FOREIGN KEY constraint; instead, use DELETE statement without a WHERE clause. Because TRUNCATE TABLE is not logged, it cannot activate a trigger.

TRUNCATE TABLE may not be used on tables participating in an indexed view.

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

DELETE

The DELETE command is used to remove rows from a table. A WHERE clause can be used to only remove some rows. If no WHERE condition is specified, all rows will be removed. After performing a DELETE operation you need to COMMIT or ROLLBACK the transaction to make the change permanent or to undo it.

TRUNCATE

TRUNCATE removes all rows from a table. The operation cannot be rolled back ... As such, TRUCATE is faster and doesn't use as much undo space as a DELETE.

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

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

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

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

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

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

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

Вы не можете ОБРЕЗАТЬ таблицу с любым внешним ключом ограничения. Вам нужно будет удалить ограничения, ОБРЕЗАТЬ таблицу и повторно наложите ограничения.

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

«Удаление каждой строки регистрируется и физически удаляется». Are you sure that's correct? The Блог MSDN says that they are not immediately purged. This is how Postgres works as well.
Brad Koch 06.10.2013 00:21

Таблица DROP

DROP TABLE [table_name];

The DROP command is used to remove a table from the database. It is a DDL command. All the rows, indexes and privileges of the table will also be removed. DROP operation cannot be rolled back.

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

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

The DELETE command is a DML command. It can be used to delete all the rows or some rows from the table based on the condition specified in WHERE clause. It is executed using a row lock, each row in the table is locked for deletion. It maintain the transaction log, so it is slower than TRUNCATE. DELETE operations can be rolled back.

Таблица TRUNCATE

TRUNCATE TABLE [table_name];

The TRUNCATE command removes all rows from a table. It won't log the deletion of each row, instead it logs the deallocation of the data pages of the table, which makes it faster than DELETE. It is executed using a table lock and whole table is locked for remove all records. It is a DDL command. TRUNCATE operations cannot be rolled back.

Это не так. Truncate и Drop можно откатить. СОЗДАТЬ ТАБЛИЦУ dbo.TestTruncate (ID INT) ВСТАВИТЬ В dbo.TestTruncate (ID) ЗНАЧЕНИЯ (1) ВСТАВИТЬ ЗНАЧЕНИЯ dbo.TestTruncate (ID) (2) ВСТАВИТЬ ЗНАЧЕНИЯ dbo.TestTruncate (ID) (3) НАЧАТЬ ТРАНСИФИКАЦИЮ dbo.TestTruncate (ID) .TestTruncate DROP TABLE dbo.TestTruncate ROLLBACK SELECT * FROM dbo.TestTruncate DROP TABLE dbo.TestTruncate

InbetweenWeekends 07.10.2019 16:31

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

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

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

Усечь заявление

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

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

Отказ от выписки

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

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

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

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