> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# В чем разница между OPTIMIZE FINAL и FINAL?

> Обсуждаются различия между OPTIMIZE FINAL и FINAL, а также случаи, когда их стоит использовать, а когда — избегать.

`OPTIMIZE FINAL` — это DDL-команда, которая физически и необратимо реорганизует
и оптимизирует данные на диске. Она физически объединяет data parts в таблицах `MergeTree`,
одновременно выполняя дедупликацию данных за счет удаления дублирующихся строк из хранилища.

`FINAL` — это модификатор **на этапе выполнения запроса**, который возвращает дедуплицированные результаты без
изменения структуры хранимых данных. Он применяет логику слияния при
чтении. Его действие временно и влияет только на результат текущего запроса.

Пользователям часто рекомендуют избегать `OPTIMIZE FINAL`, поскольку он создает
существенную нагрузку на производительность, однако не стоит путать его с `FINAL`. Во многих случаях
необходимо использовать `FINAL`, чтобы получить результаты без дубликатов, особенно при использовании табличных
движков, таких как `ReplacingMergeTree`, которые могут содержать дублирующиеся строки, еще не
замещенные в ходе фонового процесса слияния, происходящего со временем.

Таблица ниже суммирует ключевые различия:

| Aspect | `OPTIMIZE FINAL` | `FINAL` |
| - | - | - |
| Тип | DDL-команда | Модификатор запроса |
| Эффект | Постоянная оптимизация хранилища | Временная дедупликация на этапе выполнения запроса |
| Производительность | Высокая стоимость один раз, затем запросы быстрее | Меньшая стоимость одного запроса, но повторяется для каждого запроса |
| Изменение данных | Да — физически изменяет хранилище | Нет — операция только для чтения |
| Сценарий использования | Периодическое обслуживание/оптимизация | Дедуплицированные запросы в реальном времени |

<div id="when-to-use-each">
  ## Когда использовать каждый вариант
</div>

Используйте `OPTIMIZE FINAL`, когда:

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

Используйте `FINAL`, когда:

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

Оба варианта — полезные инструменты, но в ClickHouse они решают разные задачи в рамках стратегии дедупликации.
