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

# 삭제 개요

> ClickHouse에서 데이터를 삭제하는 방법

ClickHouse에서 데이터를 삭제하는 방법은 여러 가지가 있으며, 각 방법마다 장점과 성능 특성이 다릅니다. 데이터 모델과 삭제하려는 데이터 양에 따라 적절한 방법을 선택해야 합니다.

| 방법                                                                    | 구문                           | 사용 시점                                                                                                 |
| --------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------- |
| [경량한 삭제](/ko/concepts/features/operations/delete/lightweight-delete)  | `DELETE FROM [table]`        | 소량의 데이터를 삭제할 때 사용합니다. 행은 이후 실행되는 모든 SELECT 쿼리 결과에서 즉시 제외되지만, 처음에는 디스크에서 제거되지 않고 내부적으로 삭제된 것으로만 표시됩니다. |
| [Delete mutation](/ko/reference/statements/alter/delete)              | `ALTER TABLE [table] DELETE` | 데이터를 디스크에서 즉시 삭제해야 할 때 사용합니다(예: 컴플라이언스). SELECT 성능에 부정적인 영향을 줍니다.                                     |
| [테이블 비우기](/ko/reference/statements/truncate)                          | `TRUNCATE TABLE [db.table]`  | 테이블의 모든 데이터를 효율적으로 제거합니다.                                                                             |
| [파티션 삭제](/ko/reference/statements/alter/partition#drop-partitionpart) | `DROP PARTITION`             | 파티션의 모든 데이터를 효율적으로 제거합니다.                                                                             |

다음은 ClickHouse에서 데이터를 삭제하는 여러 방법을 요약한 내용입니다:

<div id="lightweight-deletes">
  ## 경량한 삭제
</div>

경량한 삭제를 사용하면 행이 즉시 삭제된 것으로 표시되어, 이후의 모든 `SELECT` 쿼리에서 자동으로 제외됩니다. 이렇게 삭제로 표시된 행은 이후 자연스러운 머지 주기 동안 제거되므로 I/O 부담이 더 적습니다. 따라서 일정 기간 동안 데이터가 스토리지에서 실제로 삭제되지 않고 삭제된 것으로만 표시될 수 있습니다. 데이터가 확실히 삭제되도록 보장해야 한다면 위의 뮤테이션 명령을 고려하십시오.

```sql theme={null}
-- 경량한 삭제를 사용하여 2018년의 모든 데이터를 삭제합니다. 권장되지 않습니다.
DELETE FROM posts WHERE toYear(CreationDate) = 2018
```

경량한 `DELETE` SQL 문으로 대량의 데이터를 삭제하면 `SELECT` 쿼리 성능에도 부정적인 영향을 줄 수 있습니다. 또한 이 명령은 프로젝션이 있는 테이블과 호환되지 않습니다.

이 작업에서는 [삭제된 행을 표시](/ko/reference/statements/delete#how-lightweight-deletes-work-internally-in-clickhouse)하기 위해 뮤테이션이 사용되며(`_row_exists` 컬럼 추가), 그 과정에서 일부 I/O가 발생합니다.

일반적으로 삭제된 데이터가 디스크에 남아 있어도 괜찮은 경우(예: 컴플라이언스 요구 사항이 없는 경우)에는 뮤테이션보다 경량한 삭제를 우선적으로 사용하는 것이 좋습니다. 다만 모든 데이터를 삭제해야 하는 경우에는 이 방식도 피해야 합니다.

[경량한 삭제](/ko/concepts/features/operations/delete/lightweight-delete)에 대해 자세히 알아보십시오.

<div id="delete-mutations">
  ## 삭제 뮤테이션
</div>

삭제 뮤테이션은 예를 들어 `ALTER TABLE ... DELETE` 명령으로 실행할 수 있습니다.

```sql theme={null}
-- mutation을 사용하여 2018년의 모든 데이터를 삭제합니다. 권장되지 않습니다.
ALTER TABLE posts DELETE WHERE toYear(CreationDate) = 2018
```

이 작업은 동기식(비복제인 경우 기본값) 또는 비동기식([mutations\_sync](/ko/reference/settings/session-settings#mutations_sync) 설정에 따라 결정)으로 실행할 수 있습니다. 이는 `WHERE` 표현식과 일치하는 모든 파트를 다시 쓰므로 I/O 사용량이 매우 큽니다. 이 프로세스에는 원자성이 없습니다. 즉, 뮤테이션된 파트가 준비되는 즉시 기존 파트와 교체되며, 뮤테이션이 진행되는 동안 실행을 시작한 `SELECT` 쿼리는 이미 뮤테이션된 파트의 데이터와 아직 뮤테이션되지 않은 파트의 데이터를 함께 보게 됩니다. 사용자는 [system.mutations](/ko/reference/system-tables/mutations#monitoring-mutations) 테이블을 통해 진행 상태를 추적할 수 있습니다. 이는 I/O 부담이 큰 작업이므로 클러스터의 `SELECT` 성능에 영향을 줄 수 있어 꼭 필요한 경우에만 사용해야 합니다.

[삭제 뮤테이션](/ko/reference/statements/alter/delete)에 대해 자세히 알아보십시오.

<div id="truncate-table">
  ## 테이블 비우기
</div>

테이블의 모든 데이터를 삭제해야 하는 경우 아래와 같이 `TRUNCATE TABLE` 명령을 사용하십시오. 이는 경량 작업입니다.

```sql theme={null}
TRUNCATE TABLE posts
```

[TRUNCATE TABLE](/ko/reference/statements/truncate)에서 자세한 내용을 확인하십시오.

<div id="drop-partition">
  ## 파티션 삭제
</div>

데이터에 사용자 지정 파티셔닝 키를 사용한 경우 파티션을 효율적으로 삭제할 수 있습니다. 카디널리티가 높은 파티셔닝은 피하는 것이 좋습니다.

```sql theme={null}
ALTER TABLE posts (DROP PARTITION '2008')
```

[DROP PARTITION](/ko/reference/statements/alter/partition)에 대해 자세히 알아보세요.

<div id="more-resources">
  ## 추가 자료
</div>

* [ClickHouse에서 업데이트 및 삭제 처리하기](https://clickhouse.com/blog/handling-updates-and-deletes-in-clickhouse)
