> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Обзор удаления данных

> Как удалять данные в ClickHouse

В ClickHouse есть несколько способов удаления данных, и у каждого из них свои преимущества и особенности производительности. Выбирайте подходящий метод в зависимости от вашей модели данных и объема данных, который нужно удалить.

| Метод                                                                              | Синтаксис                    | Когда использовать                                                                                                                                                                                     |
| ---------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [Легковесное удаление](/ru/concepts/features/operations/delete/lightweight-delete) | `DELETE FROM [table]`        | Используйте при удалении небольших объемов данных. Строки сразу исключаются из всех последующих запросов SELECT, но на первом этапе только внутренне помечаются как удаленные, а не удаляются с диска. |
| [Удаляющая мутация](/ru/reference/statements/alter/delete)                         | `ALTER TABLE [table] DELETE` | Используйте, если данные необходимо немедленно удалить с диска (например, для соблюдения требований). Негативно влияет на производительность SELECT.                                                   |
| [Очистка таблицы](/ru/reference/statements/truncate)                               | `TRUNCATE TABLE [db.table]`  | Эффективно удаляет все данные из таблицы.                                                                                                                                                              |
| [Удаление партиции](/ru/reference/statements/alter/partition#drop-partitionpart)   | `DROP PARTITION`             | Эффективно удаляет все данные из партиции.                                                                                                                                                             |

Ниже приведена сводка различных способов удаления данных в ClickHouse:

<div id="lightweight-deletes">
  ## Легковесные удаления
</div>

При легковесном удалении строки сразу помечаются как удалённые, поэтому они автоматически исключаются из всех последующих запросов `SELECT`. Физическое удаление этих строк происходит позже, во время обычных циклов слияния, и потому требует меньше операций I/O. В результате данные могут в течение неопределённого времени фактически оставаться в хранилище и быть лишь помеченными как удалённые. Если вам нужно гарантированно удалить данные, рассмотрите указанную выше команду мутации.

```sql theme={null}
-- удалить все данные за 2018 год с помощью легковесного удаления. Не рекомендуется.
DELETE FROM posts WHERE toYear(CreationDate) = 2018
```

Удаление больших объёмов данных с помощью легковесного оператора `DELETE` также может негативно сказаться на производительности запросов `SELECT`. Кроме того, эта команда несовместима с таблицами, содержащими проекции.

Обратите внимание: в ходе этой операции для [пометки удалённых строк](/ru/reference/statements/delete#how-lightweight-deletes-work-internally-in-clickhouse) используется мутация (добавляется столбец `_row_exists`), что приводит к некоторым накладным расходам на I/O.

В целом легковесные удаления предпочтительнее мутаций, если допустимо, что удалённые данные будут оставаться на диске (например, при отсутствии требований compliance). Однако этого подхода всё же следует избегать, если нужно удалить все данные.

Подробнее о [легковесных удалениях](/ru/concepts/features/operations/delete/lightweight-delete).

<div id="delete-mutations">
  ## Удаляющие мутации
</div>

Удаляющие мутации можно выполнить командой `ALTER TABLE ... DELETE`, например.

```sql theme={null}
-- удалить все данные за 2018 год с помощью мутации. Не рекомендуется.
ALTER TABLE posts DELETE WHERE toYear(CreationDate) = 2018
```

Они могут выполняться либо синхронно (по умолчанию для нереплицируемых таблиц), либо асинхронно (это определяется настройкой [mutations\_sync](/ru/reference/settings/session-settings#mutations_sync)). Это крайне ресурсоемкие по вводу-выводу операции: переписываются все части, соответствующие выражению `WHERE`. В этом процессе нет атомарности — части заменяются мутировавшими частями сразу после их готовности, и `SELECT`-запрос, который начинает выполняться во время мутации, увидит данные как из уже измененных частей, так и из тех, которые еще не были изменены. Пользователи могут отслеживать ход выполнения через таблицу [system.mutations](/ru/reference/system-tables/mutations#monitoring-mutations). Это операции с высокой нагрузкой на I/O, поэтому их следует использовать с осторожностью, так как они могут повлиять на производительность `SELECT` в кластере.

Подробнее о [удаляющих мутациях](/ru/reference/statements/alter/delete).

<div id="truncate-table">
  ## TRUNCATE TABLE
</div>

Если нужно удалить все данные из таблицы, используйте команду `TRUNCATE TABLE`, приведённую ниже. Это малозатратная операция.

```sql theme={null}
TRUNCATE TABLE posts
```

Подробнее см. [TRUNCATE TABLE](/ru/reference/statements/truncate).

<div id="drop-partition">
  ## Удаление партиции
</div>

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

```sql theme={null}
ALTER TABLE posts (DROP PARTITION '2008')
```

Подробнее см. [DROP PARTITION](/ru/reference/statements/alter/partition).

<div id="more-resources">
  ## Дополнительные материалы
</div>

* [Обработка обновлений и удалений в ClickHouse](https://clickhouse.com/blog/handling-updates-and-deletes-in-clickhouse)
