다음을 통해 공유


TRUNCATE TABLE을 사용하여 모든 행 삭제

TRUNCATE TABLE 문은 속도가 빠르며 기록하지 않고 테이블에서 모든 행을 삭제하는 방법입니다. TRUNCATE TABLE은 기능적으로 WHERE 절 없는 DELETE 문과 동일합니다. 그러나 TRUNCATE TABLE이 더 빠르고 시스템 및 트랜잭션 로그 리소스를 덜 사용합니다.

DELETE 문과 비교하여 TRUNCATE TABLE에는 다음과 같은 이점이 있습니다.

  • 트랜잭션 로그 공간이 덜 사용됩니다.
    DELETE 문은 행을 한번에 하나씩 제거하고 각 삭제된 행에 대해 트랜잭션 로그에 항목을 기록합니다. TRUNCATE TABLE은 테이블의 데이터를 저장하는 데 사용되는 데이터 페이지의 할당을 취소하여 데이터를 제거하며 페이지 할당 취소만을 트랜잭션 로그에 기록합니다.
  • 일반적으로 적은 수의 잠금이 사용됩니다.
    행 잠금을 사용하여 DELETE 문을 실행하면 삭제를 위해 테이블의 각 행이 잠깁니다. TRUNCATE TABLE은 항상 테이블과 페이지를 잠그지만 각 행은 잠그지 않습니다.
  • 빈 페이지는 예외 없이 테이블에 남습니다.
    DELETE 문이 실행된 다음 테이블은 계속 빈 페이지를 포함할 수 있습니다. 예를 들어 배타(LCK_M_X) 테이블 잠금이 하나 이상 있어야만 힙의 빈 페이지를 할당 취소할 수 있습니다. 삭제 작업에서 테이블 잠금을 사용하지 않는 경우 테이블(힙)에는 빈 페이지가 많이 포함됩니다. 인덱스의 경우 삭제 작업 후에 빈 페이지가 남을 수 있지만 이러한 페이지는 백그라운드 정리 프로세스에 의해 할당이 신속하게 취소됩니다.

DELETE와 마찬가지로 TRUNCATE TABLE 문을 사용하여 비워진 테이블 정의는 인덱스 및 기타 관련 개체와 함께 데이터베이스에 유지됩니다.

대형 테이블 잘라내기

Microsoft SQL Server 2005에는 삭제를 위해 모든 익스텐트를 동시에 잠그지 않고도 128익스텐트를 넘는 테이블을 삭제하거나 자를 수 있는 기능이 새롭게 추가되었습니다. 자세한 내용은 큰 개체 삭제 및 다시 작성을 참조하십시오.

다음 예에서는 JobCandidate 테이블에서 모든 데이터를 제거합니다. SELECT 문이 TRUNCATE TABLE 문 앞과 뒤에 포함되어 결과를 비교합니다.

USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount 
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount 
FROM HumanResources.JobCandidate;
GO

참고 항목

개념

DELETE를 사용하여 행 삭제
결과 집합의 행 삭제
TOP을 사용하여 삭제되는 행 제한

관련 자료

DROP TABLE(Transact-SQL)
TRUNCATE TABLE(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기