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

# OPTIMIZE FINAL과 FINAL의 차이점은 무엇인가요?

> OPTIMIZE FINAL과 FINAL의 차이점과 각각을 언제 사용하거나 피해야 하는지 설명합니다.

`OPTIMIZE FINAL`은 디스크에 저장된 데이터를 물리적으로, 그리고 영구적으로 재구성하고
최적화하는 DDL 명령입니다. 이 명령은 `MergeTree` 테이블의 데이터 파트를 물리적으로 머지하고,
그 과정에서 저장소의 중복 행을 제거하여 데이터 중복 제거를 수행합니다.

`FINAL`은 저장된 데이터의 구조를 변경하지 않으면서 중복 제거된 결과를 제공하는
**쿼리 시점** 수정자입니다. 읽기 시점에 머지 로직을 수행하는 방식으로 동작합니다.
이는 일시적이며 현재 쿼리 결과에만 영향을 줍니다.

`OPTIMIZE FINAL`은 성능 오버헤드가 크므로 사용을 피하라는 권고를 받는 경우가 많지만,
이 둘을 혼동해서는 안 됩니다. 특히 `ReplacingMergeTree`와 같은 테이블
엔진을 사용할 때는 중복 없는 결과를 얻기 위해 `FINAL`을 사용해야 하는 경우가 많습니다. 이러한 엔진에는
최종적으로 수행되는 백그라운드 머지 과정에서 아직 대체되지 않은 중복 행이 남아 있을 수 있기 때문입니다.

아래 표는 주요 차이점을 요약합니다:

| Aspect | `OPTIMIZE FINAL`            | `FINAL`                 |
| ------ | --------------------------- | ----------------------- |
| 유형     | DDL 명령                      | 쿼리 수정자                  |
| 효과     | 영구적인 저장소 최적화                | 일시적인 쿼리 시점 중복 제거        |
| 성능     | 비용이 한 번 크게 들지만 이후 쿼리는 더 빨라짐 | 개별 비용은 더 낮지만 각 쿼리마다 반복됨 |
| 데이터 수정 | 예 - 저장소를 물리적으로 변경함          | 아니요 - 읽기 전용 작업          |
| 사용 사례  | 주기적인 유지 관리/최적화              | 실시간 중복 제거 쿼리            |

<div id="when-to-use-each">
  ## 각각을 언제 사용해야 하는지
</div>

다음과 같은 경우 `OPTIMIZE FINAL`을 사용하십시오:

* 쿼리 성능을 영구적으로 개선하려는 경우
* 일회성 최적화 비용을 감수할 수 있는 경우
* 테이블(table) 유지 관리를 주기적으로 수행하는 경우
* 중복 데이터를 물리적으로 정리하려는 경우

다음과 같은 경우 `FINAL`을 사용하십시오:

* 중복 제거된 결과가 즉시 필요한 경우
* 영구적인 최적화를 기다릴 수 없거나 원하지 않는 경우
* 중복 제거된 데이터가 가끔만 필요한 경우
* 자주 변경되는 데이터를 다루는 경우

둘 다 유용한 도구이지만, ClickHouse의 중복 제거 전략에서 각각 용도가 다릅니다.
