> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-home-button.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 они решают разные задачи в рамках стратегии дедупликации.
