본문 바로가기

DB/MySQL

MySQL 테이블 내용 삭제 방법 비교: DELETE, DROP, TRUNCATE

CREATE TABLE bigtbl1 (SELECT * FROM employees.employees);
CREATE TABLE bigtbl2 (SELECT * FROM employees.employees);
CREATE TABLE bigtbl3 (SELECT * FROM employees.employees);

DELETE FROM bigtbl1; # 레코드를 삭제
DROP TABLE bigtbl2; # 테이블을 통째로 삭제
TRUNCATE TABLE bigtbl3; # 테이블의 구조는 남기고 레코드를 삭제

속도를 비교하자면 DELETE FROM 이 가장 느리다.

왜냐하면 DELETE FROM 은 DML(data manupulation language)로, 트랜잭션 로그를 기록하는 작업 때문에 삭제가 오래 걸린다. 수백 만 건 또는 수천 만 건의 데이터를 삭제할 경우에 한참동안 삭제를 할 수 도 있다. DDL(data definition language)인 DROP TABLE 은 테이블을 통째로 지우며 트랜잭션을 발생시키지 않는다, TRUNCATE 또한 DDL문으로 효과는 DELETE FROM 과 동일하지만 트랜잭션 로그를 기록하지 않아서 속도가 빠르다.

그러므로 대용량의 테이블 전체 내용을 삭제할 때, 테이블 자체가 필요없는 경우에는 DROP을, 테이블의 구조를 남기면서 트랜잭션 로그를 남기고 싶지 않다면 TRUNCATE 를, 로그가 필요하다면 DELETE 를 사용하면 된다.

Reference

이것이 mysql이다.