| 방법 | 구문 | 사용 시점 |
|---|---|---|
| 경량한 삭제 | DELETE FROM [table] | 소량의 데이터를 삭제할 때 사용합니다. 행은 이후 실행되는 모든 SELECT 쿼리 결과에서 즉시 제외되지만, 처음에는 디스크에서 제거되지 않고 내부적으로 삭제된 것으로만 표시됩니다. |
| Delete mutation | ALTER TABLE [table] DELETE | 데이터를 디스크에서 즉시 삭제해야 할 때 사용합니다(예: 컴플라이언스). SELECT 성능에 부정적인 영향을 줍니다. |
| 테이블 비우기 | TRUNCATE TABLE [db.table] | 테이블의 모든 데이터를 효율적으로 제거합니다. |
| 파티션 삭제 | DROP PARTITION | 파티션의 모든 데이터를 효율적으로 제거합니다. |
경량한 삭제
SELECT 쿼리에서 자동으로 제외됩니다. 이렇게 삭제로 표시된 행은 이후 자연스러운 머지 주기 동안 제거되므로 I/O 부담이 더 적습니다. 따라서 일정 기간 동안 데이터가 스토리지에서 실제로 삭제되지 않고 삭제된 것으로만 표시될 수 있습니다. 데이터가 확실히 삭제되도록 보장해야 한다면 위의 뮤테이션 명령을 고려하십시오.
DELETE SQL 문으로 대량의 데이터를 삭제하면 SELECT 쿼리 성능에도 부정적인 영향을 줄 수 있습니다. 또한 이 명령은 프로젝션이 있는 테이블과 호환되지 않습니다.
이 작업에서는 삭제된 행을 표시하기 위해 뮤테이션이 사용되며(_row_exists 컬럼 추가), 그 과정에서 일부 I/O가 발생합니다.
일반적으로 삭제된 데이터가 디스크에 남아 있어도 괜찮은 경우(예: 컴플라이언스 요구 사항이 없는 경우)에는 뮤테이션보다 경량한 삭제를 우선적으로 사용하는 것이 좋습니다. 다만 모든 데이터를 삭제해야 하는 경우에는 이 방식도 피해야 합니다.
경량한 삭제에 대해 자세히 알아보십시오.
삭제 뮤테이션
ALTER TABLE ... DELETE 명령으로 실행할 수 있습니다.
WHERE 표현식과 일치하는 모든 파트를 다시 쓰므로 I/O 사용량이 매우 큽니다. 이 프로세스에는 원자성이 없습니다. 즉, 뮤테이션된 파트가 준비되는 즉시 기존 파트와 교체되며, 뮤테이션이 진행되는 동안 실행을 시작한 SELECT 쿼리는 이미 뮤테이션된 파트의 데이터와 아직 뮤테이션되지 않은 파트의 데이터를 함께 보게 됩니다. 사용자는 system.mutations 테이블을 통해 진행 상태를 추적할 수 있습니다. 이는 I/O 부담이 큰 작업이므로 클러스터의 SELECT 성능에 영향을 줄 수 있어 꼭 필요한 경우에만 사용해야 합니다.
삭제 뮤테이션에 대해 자세히 알아보십시오.
테이블 비우기
TRUNCATE TABLE 명령을 사용하십시오. 이는 경량 작업입니다.