[sql] drop table과 truncate table의 차이점은 무엇입니까?

보고서 롤업의 일부로 작성하는 테이블이 있습니다. 나중에는 전혀 필요하지 않습니다. 누군가가 더 빠르기 때문에 자르라고 언급했습니다.



답변

테이블에서 레코드를 삭제하면 모든 삭제가 기록되고 삭제 된 레코드에 대해 삭제 트리거가 실행됩니다. Truncate는 각 행을 로깅하지 않고 테이블을 비우는보다 강력한 명령입니다. SQL Server는 각 행의 외래 키를 확인해야하기 때문에 테이블을 참조하는 외래 키가있는 테이블을 자르지 못하게합니다.

Truncate는 일반적으로 초고속이며 임시 테이블에서 데이터를 정리하는 데 이상적입니다. 나중에 사용할 수 있도록 테이블의 구조를 보존합니다.

테이블 정의 와 데이터 를 실제로 제거하려면 테이블을 삭제하면 됩니다.

자세한 내용은 이 MSDN 문서 를 참조하십시오.


답변

DROP TABLE은 테이블을 삭제합니다.

TRUNCATE TABLE은이를 비우지 만 향후 데이터를 위해 구조를 그대로 둡니다.


답변

DROP과 TRUNC는 다른 일을합니다.

테이블 자르기

개별 행 삭제를 기록하지 않고 테이블에서 모든 행을 제거합니다. TRUNCATE TABLE은 WHERE 절이없는 DELETE 문과 유사합니다. 그러나 TRUNCATE TABLE은 더 빠르고 시스템 및 트랜잭션 로그 리소스를 더 적게 사용합니다.

드롭 테이블

하나 이상의 테이블 정의와 해당 테이블에 대한 모든 데이터, 인덱스, 트리거, 제약 조건 및 권한 사양을 제거합니다.

속도에 관한 한 차이는 작아야합니다. 어쨌든 테이블 구조가 전혀 필요하지 않다면 반드시 DROP을 사용하십시오.


답변

DELETE TABLE과 TRUNCATE TABLE의 차이점을 의미한다고 생각합니다.

드롭 테이블

데이터베이스에서 테이블을 제거하십시오.

표 삭제

조건없이 모든 행을 삭제합니다. 트리거와 참조가 있으면 모든 행에 대해 처리됩니다. 또한 인덱스가 있으면 수정됩니다.

테이블 자르기

행 개수를 0으로 설정하고 각 행을 로깅하지 않습니다. 다른 둘 다만큼 더 빠릅니다.


답변

이 답변 중 어느 것도이 두 작업에 대한 중요한 차이점을 지적하지 않습니다. 테이블 삭제는 롤백 할 수있는 작업입니다. 그러나 자르기는 롤백 할 수 없습니다 [ ‘TRUNCATE TABLE’도 롤백 할 수 있습니다]. 이러한 방식으로 매우 큰 테이블을 삭제하는 것은 많은 행이있는 경우 매우 비용이 많이들 수 있습니다. 롤백하기로 결정한 경우 모두 임시 공간에 기록되어야하기 때문입니다.

일반적으로 큰 테이블을 제거하려면 테이블을 자른 다음 삭제합니다. 이렇게하면 데이터가 기록없이 제거되고 테이블이 삭제 될 수 있으며 데이터를 기록 할 필요가 없기 때문에 삭제 비용이 매우 저렴합니다.

자르기는 데이터를 삭제하고 테이블을 떠나는 반면, 드롭은 실제로 데이터와 테이블 자체를 삭제한다는 점을 지적하는 것이 중요합니다. (외래 키가 그러한 작업을 배제하지 않는다고 가정)


답변

DROP 테이블

DROP TABLE [table_name];

DROP 명령은 데이터베이스에서 테이블을 제거하는 데 사용됩니다. DDL 명령입니다. 테이블의 모든 행, 인덱스 및 권한도 제거됩니다. DROP 작업은 롤백 할 수 없습니다.

테이블 삭제

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

DELETE 명령은 DML 명령입니다. WHERE 절에 지정된 조건에 따라 테이블에서 모든 행 또는 일부 행을 삭제하는 데 사용할 수 있습니다. 행 잠금을 사용하여 실행되며 테이블의 각 행은 삭제를 위해 잠 깁니다. 트랜잭션 로그를 유지하므로 TRUNCATE보다 느립니다. DELETE 작업은 롤백 할 수 있습니다.

TRUNCATE 테이블

TRUNCATE TABLE [table_name];

TRUNCATE 명령은 테이블에서 모든 행을 제거합니다. 각 행의 삭제를 기록하지 않고 테이블의 데이터 페이지 할당 취소를 기록하므로 DELETE보다 빠릅니다. 테이블 잠금을 사용하여 실행되며 모든 레코드를 제거하기 위해 전체 테이블이 잠 깁니다. DDL 명령입니다. TRUNCATE 작업은 롤백 할 수 없습니다.


답변

TRUNCATE TABLE은 모든 이전 인덱싱 및 기타 사항을 유지합니다. DROP TABLE은 분명히 테이블을 제거하고 나중에 다시 만들어야합니다.