[MySQL] Truncate Table 명령

명령어 형식

TRUNCATE [TABLE] tbl_name

 

TRUNCATE TABLE 명령문은 테이블의 내용을 완전하게 비웁니다. Drop 권한이 필요합니다.

테이블의 TRUNCATE TABLE HANDLER OPEN으로 열린 테이블의 모든 핸들러를 닫습니다.

 

논리적으로 TRUNCATE TABLE 모든 행을 삭제하는 DELETE , 또는 DROP TABLE CREATE TABLE 시퀀스와 유사합니다. 고성능을 달성하기 위해 데이터를 삭제하는 DML 방법을 무시합니다. 따라서 롤백할 없고 ON DELETE 트리거가 발생하지 않으며 부모-자식 외래 관계가있는 InnoDB 테이블에 대해 수행될 없습니다.

 

TRUNCATE TABLE DELETE 비슷하지만 DML 문이 아닌 DDL문으로 분류됩니다. 다음과 같은 점에서 DELETE 다릅니다.

+ Truncate 조작은 테이블을 삭제하고 다시 작성하는데, 특히 대형 테이블의 경우 행을 하나씩 삭제하는 것보다 훨씬 빠릅니다.

+ 자르기 조작으로 내재된 커미트가 발생하므로 롤백 없습니다.

+ 세션에 활성 테이블 잠금이 있으면 절단 작업을 수행할 없습니다.

+ 테이블을 참조하는 다른 테이블의 FOREIGN KEY 제약 조건이 있으면 InnoDB 테이블 또는 NDB 테이블에 대해 TRUNCATE TABLE 실패합니다. 동일한 테이블의 컬럼간 외래키 제약 조건이 허용됩니다.

+ TRUNCATE 작업은 삭제된 수에 대한 의미있는 값을 반환하지 않습니다. 일반적인 결과는 "0 rows affected, (0 영향)"이며 "no information.(정보 없음)"으로 해석해야합니다.

+ 테이블 형식 파일 tbl_name.frm 유효하면 데이터 또는 인덱스 파일이 손상된 경우에도 TRUNCATE TABLE 사용하여 테이블을 테이블로 다시 작성할 있습니다.

+ AUTO_INCREMENT 값은 시작값으로 재설정됩니다. 일반적으로 시퀀스 값을 재사용하지 않는 MyISAM InnoDB 경우에도 마찬가지입니다.

+ 분할된 테이블과 함께 사용될 TRUNCATE TABLE 분할을 유지합니다. , 파티션 정의 (.par) 파일은 영향을받지 않지만 데이터 인덱스 파일은 삭제되고 다시 작성됩니다.

+ TRUNCATE TABLE 문은 ON DELETE 트리거를 호출하지 않습니다.

 

테이블의 TRUNCATE TABLE HANDLER OPEN으로 열린 테이블의 모든 핸들러를 닫습니다.

 

TRUNCATE TABLE 바이너리 로깅 복제 목적으로 DROP TABLE CREATE TABLE, DML 아닌 DDL 처리됩니다. 이는 트랜잭션 격리 수준이 명령문 기반 로깅 (READ COMMITTED 또는 READ UNCOMMITTED) 허용하지 않는 InnoDB 기타 트랜잭션 스토리지 엔진을 사용할 STATEMENT 또는 MIXED 로깅 모드를 사용할 명령문이 로깅 복제되지 않았기 때문입니다. 그러나 여전히 앞에서 설명한 방식으로 InnoDB 사용하여 복제 슬레이브에 적용됩니다.

 

InnoDB 버퍼 풀이 있고 innodb_adaptive_hash_index 활성화된 시스템에서 TRUNCATE TABLE 작업으로 인해 InnoDB 테이블의 적응형 해시 인덱스 항목을 제거 발생하는 LRU 스캔으로 인해 시스템 성능이 일시적으로 저하 있습니다.

 

TRUNCATE TABLE Performance Schema summary 테이블과 함께 사용할 있지만 행을 제거하지 않고 요약 컬럼을 0 또는 NULL 재설정하는 효과가 있습니다.

댓글(0)

Designed by JB FACTORY