OPTIMIZE FINAL — это DDL-команда, которая физически и необратимо реорганизует
и оптимизирует данные на диске. Она физически объединяет data parts в таблицах MergeTree,
одновременно выполняя дедупликацию данных за счет удаления дублирующихся строк из хранилища.
FINAL — это модификатор на этапе выполнения запроса, который возвращает дедуплицированные результаты без
изменения структуры хранимых данных. Он применяет логику слияния при
чтении. Его действие временно и влияет только на результат текущего запроса.
Пользователям часто рекомендуют избегать OPTIMIZE FINAL, поскольку он создает
существенную нагрузку на производительность, однако не стоит путать его с FINAL. Во многих случаях
необходимо использовать FINAL, чтобы получить результаты без дубликатов, особенно при использовании табличных
движков, таких как ReplacingMergeTree, которые могут содержать дублирующиеся строки, еще не
замещенные в ходе фонового процесса слияния, происходящего со временем.
Таблица ниже суммирует ключевые различия:
| Aspect | OPTIMIZE FINAL | FINAL |
|---|---|---|
| Тип | DDL-команда | Модификатор запроса |
| Эффект | Постоянная оптимизация хранилища | Временная дедупликация на этапе выполнения запроса |
| Производительность | Высокая стоимость один раз, затем запросы быстрее | Меньшая стоимость одного запроса, но повторяется для каждого запроса |
| Изменение данных | Да — физически изменяет хранилище | Нет — операция только для чтения |
| Сценарий использования | Периодическое обслуживание/оптимизация | Дедуплицированные запросы в реальном времени |
Когда использовать каждый вариант
OPTIMIZE FINAL, когда:
- Вы хотите надолго повысить производительность запросов
- Вы можете позволить себе разовые затраты на оптимизацию
- Вы выполняете периодическое обслуживание таблиц
- Вы хотите физически удалить дубликаты данных
FINAL, когда:
- Вам сразу нужны дедуплицированные результаты
- Вы не можете ждать завершения постоянной оптимизации или не хотите её выполнять
- Дедуплицированные данные нужны вам лишь время от времени
- Вы работаете с данными, которые часто меняются