티스토리 뷰
오늘 회사에서 개발환경의 DB 용량이 가득찬 상황이 생겼습니다. 안 쓰는 테이블을 파악해서 DROP 할지 아니면 테이블은 유지를 하고 TRUNCATE 할지, 그 것도 아니면 오래된 레코드를 조건문을 걸어서 DELETE 할지 고민을 했습니다. 이러한 고민들을 바탕으로 삭제와 관련된 명령어들을 한번 정리해보면 좋을 것 같아 글을 작성해 봅니다.
데이터베이스 관리 작업 중 가장 자주 접하게 되는 명령어 중 하나가 DELETE, DROP 그리고 TRUNCATE입니다. 이 명령어들은 삭제와 관련된 명령어들 이지만, 작동 방식과 성능, 그리고 사용 목적이 모두 다릅니다. 이 글에서는 각 명령어의 차이를 명확히 이해하고, 어떤 상황에서 적합한지 알아보겠습니다.
DELETE: 데이터를 선택적으로 삭제
DELETE 명령어는 테이블에서 특정 조건에 맞는 데이터를 삭제할 때 사용됩니다. 테이블의 구조는 유지되며, 일부 데이터만 제거됩니다.
주요 특징
- 조건 삭제 가능: WHERE 절을 사용해 원하는 데이터만 삭제.
- 로그 기록: 트랜잭션 로그에 기록되며, 롤백이 가능합니다.
- 성능: 조건에 따라 다소 느릴 수 있습니다.
- 테이블 구조 유지: 데이터만 삭제되고 테이블은 그대로 유지됩니다.
예제
DELETE FROM employees WHERE department = 'Sales';
- employees 테이블에서 Sales 부서의 데이터를 삭제합니다.
사용 시기
- 특정 조건에 맞는 일부 데이터만 삭제해야 할 때.
- 트랜잭션을 활용해 작업을 롤백해야 할 가능성이 있을 때
DROP: 테이블 자체를 삭제
DROP 명령어는 테이블 전체를 삭제하며, 테이블의 데이터뿐만 아니라 구조와 모든 관련 메타데이터도 제거됩니다.
주요 특징
- 조건 없이 전체 삭제: 테이블과 데이터가 모두 사라집니다.
- 롤백 불가능: 작업 후 데이터를 복구할 수 없습니다.
- 속도: 테이블 구조까지 삭제하기 때문에 매우 빠릅니다.
예제
DROP TABLE employees;
- employees 테이블 자체를 삭제합니다.
사용 시기
- 테이블이 더 이상 필요 없고, 구조까지 제거해야 할 때.
- 대규모 변경 작업 전에 기존 테이블을 완전히 삭제하고 새로 만들고 싶을 때.
TRUNCATE: 데이터만 초기화
TRUNCATE 명령어는 테이블의 모든 데이터를 빠르게 삭제합니다. 그러나 테이블의 구조는 그대로 유지됩니다.
주요 특징
- 조건 없이 데이터 전체 삭제: 특정 조건을 적용할 수 없습니다.
- 속도: 데이터를 한 번에 초기화하기 때문에 빠릅니다.
- 롤백 불가능: 로그 기록이 적어서 복구할 수 없습니다.
- 테이블 구조 유지: 데이터만 삭제되고 테이블은 그대로 남습니다.
예제
TRUNCATE TABLE employees;
- employees 테이블의 데이터를 모두 삭제합니다.
사용 시기
- 테이블 데이터를 초기화해야 하지만 구조는 유지해야 할 때.
- 데이터 양이 많아 DELETE 명령어가 느릴 때.
DELETE vs DROP vs TRUNCATE 비교
명령어 | DELETE | DROP | TRUNCATE |
삭제 범위 | 조건부 데이터 삭제 | 테이블 전체 삭제 | 테이블 데이터 전체 삭제 |
테이블 구조 | 유지 | 삭제 | 유지 |
롤백 가능 여부 | 가능 | 불가능 | 불가능 |
속도 | 느림 | 빠름 | 매우 빠름 |
조건 사용 가능 여부 | 가능 | 불가능 | 불가능 |
DELETE, DROP 그리고 TRUNCATE에 대해 정리해봤습니다. 필요한 상황에 맞춰 명령어를 사용해보면 좋을 것 같습니다 !
개발환경의 DB가 FULL이 될 때까지 인지를 못하고 있다가 부랴부랴 공간을 확보했습니다. 그 사이에 발생한 데이터들이 날라간 상황이라 모니터링을 더 꾸준히 해야겠다고 느꼈습니다. 다음 글에는 DB 용량이 80프로 90프로 초과되면 메일이나 메신저가 올 수 있도록 쉘스크립트랑 배치를 만드는 내용을 담고 싶습니다.
'개발 지식 > 데이터베이스' 카테고리의 다른 글
SQL 잘 쓰는 방법 | 가독성과 유지보수를 고려한 실용 가이드 (1) | 2025.02.18 |
---|---|
SQL 성능 튜닝 기본 개념 | Explain Plan 사용법 (0) | 2025.02.12 |
데이터베이스 성능의 핵심 | 인덱스와 복합 인덱스란 무엇인가? (0) | 2025.01.13 |
DB 성능 튜닝 | 300만 건 이상의 데이터에서 페이지네이션 성능 개선 (0) | 2025.01.12 |
DB 성능 튜닝 | 인덱스와 쿼리 최적화 (0) | 2025.01.09 |
- Total
- Today
- Yesterday
- vimium
- 쿼리최적화
- 기술면접
- NoSQL
- 확장프로그램
- grammarly
- 데이터베이스
- 디스크사용량
- 개발자면접
- Ai
- 개발
- 인덱스
- SQL
- 삭제쿼리
- keyset
- db
- db성능개선
- 진행률
- 쿼리
- 개발자
- 개발기
- 역직렬화
- 크롬
- 쿼리튜닝
- 개발지식
- 데이터베이스삭제
- read-tracker
- setter
- readtracker
- 페이지네이션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |