Ниже приведена сводка различных способов удаления данных в ClickHouse:
Легковесные удаления
SELECT. Физическое удаление этих строк происходит позже, во время обычных циклов слияния, и потому требует меньше операций I/O. В результате данные могут в течение неопределённого времени фактически оставаться в хранилище и быть лишь помеченными как удалённые. Если вам нужно гарантированно удалить данные, рассмотрите указанную выше команду мутации.
DELETE также может негативно сказаться на производительности запросов SELECT. Кроме того, эта команда несовместима с таблицами, содержащими проекции.
Обратите внимание: в ходе этой операции для пометки удалённых строк используется мутация (добавляется столбец _row_exists), что приводит к некоторым накладным расходам на I/O.
В целом легковесные удаления предпочтительнее мутаций, если допустимо, что удалённые данные будут оставаться на диске (например, при отсутствии требований compliance). Однако этого подхода всё же следует избегать, если нужно удалить все данные.
Подробнее о легковесных удалениях.
Удаляющие мутации
ALTER TABLE ... DELETE, например.
WHERE. В этом процессе нет атомарности — части заменяются мутировавшими частями сразу после их готовности, и SELECT-запрос, который начинает выполняться во время мутации, увидит данные как из уже измененных частей, так и из тех, которые еще не были изменены. Пользователи могут отслеживать ход выполнения через таблицу system.mutations. Это операции с высокой нагрузкой на I/O, поэтому их следует использовать с осторожностью, так как они могут повлиять на производительность SELECT в кластере.
Подробнее о удаляющих мутациях.
TRUNCATE TABLE
TRUNCATE TABLE, приведённую ниже. Это малозатратная операция.