보고서 롤업의 일부로 작성하는 테이블이 있습니다. 나중에는 전혀 필요하지 않습니다. 누군가가 더 빠르기 때문에 자르라고 언급했습니다.
보고서 롤업의 일부로 작성하는 테이블이 있습니다. 나중에는 전혀 필요하지 않습니다. 누군가가 더 빠르기 때문에 자르라고 언급했습니다.
답변:
테이블에서 레코드를 삭제하면 모든 삭제가 기록되고 삭제 된 레코드에 대해 삭제 트리거가 실행됩니다. Truncate는 각 행을 로깅하지 않고 테이블을 비우는보다 강력한 명령입니다. SQL Server는 각 행의 외래 키를 확인해야하기 때문에 테이블을 참조하는 외래 키가있는 테이블을 자르지 못하게합니다.
Truncate는 일반적으로 초고속이며 임시 테이블에서 데이터를 정리하는 데 이상적입니다. 나중에 사용할 수 있도록 테이블의 구조를 보존합니다.
테이블 정의 와 데이터 를 실제로 제거하려면 테이블을 삭제하면 됩니다.
자세한 내용은 이 MSDN 문서 를 참조하십시오.
DROP TABLE은 테이블을 삭제합니다.
TRUNCATE TABLE은이를 비우지 만 향후 데이터를 위해 구조를 그대로 둡니다.
DROP과 TRUNC는 다른 일을합니다.
테이블 자르기
개별 행 삭제를 기록하지 않고 테이블에서 모든 행을 제거합니다. TRUNCATE TABLE은 WHERE 절이없는 DELETE 문과 유사합니다. 그러나 TRUNCATE TABLE은 더 빠르고 시스템 및 트랜잭션 로그 리소스를 더 적게 사용합니다.
드롭 테이블
하나 이상의 테이블 정의와 해당 테이블에 대한 모든 데이터, 인덱스, 트리거, 제약 조건 및 권한 사양을 제거합니다.
속도에 관한 한 차이는 작아야합니다. 어쨌든 테이블 구조가 전혀 필요하지 않다면 반드시 DROP을 사용하십시오.
DELETE TABLE과 TRUNCATE TABLE의 차이점을 의미한다고 생각합니다.
드롭 테이블
데이터베이스에서 테이블을 제거하십시오.
표 삭제
조건없이 모든 행을 삭제합니다. 트리거와 참조가 있으면 모든 행에 대해 처리됩니다. 또한 인덱스가 있으면 수정됩니다.
테이블 자르기
행 개수를 0으로 설정하고 각 행을 로깅하지 않습니다. 다른 둘 다만큼 더 빠릅니다.
set the row count zero
실제로 ID 값을 초기 ID 시드 값으로 다시 설정합니다.
이 답변 중 어느 것도이 두 작업에 대한 중요한 차이점을 지적하지 않습니다. 테이블 삭제는 롤백 할 수있는 작업입니다. 그러나 자르기는 롤백 할 수 없습니다 [ 'TRUNCATE TABLE'도 롤백 할 수 있습니다]. 이러한 방식으로 매우 큰 테이블을 삭제하는 것은 많은 행이있는 경우 매우 비용이 많이들 수 있습니다. 롤백하기로 결정한 경우 모두 임시 공간에 기록되어야하기 때문입니다.
일반적으로 큰 테이블을 제거하려면 테이블을 자른 다음 삭제합니다. 이렇게하면 데이터가 기록없이 제거되고 테이블이 삭제 될 수 있으며 데이터를 기록 할 필요가 없기 때문에 삭제 비용이 매우 저렴합니다.
자르기는 데이터를 삭제하고 테이블을 떠나는 반면, 드롭은 실제로 데이터와 테이블 자체를 삭제한다는 점을 지적하는 것이 중요합니다. (외래 키가 그러한 작업을 배제하지 않는다고 가정)
DROP TABLE [table_name];
DROP 명령은 데이터베이스에서 테이블을 제거하는 데 사용됩니다. DDL 명령입니다. 테이블의 모든 행, 인덱스 및 권한도 제거됩니다. DROP 작업은 롤백 할 수 없습니다.
DELETE FROM [table_name]
WHERE [condition];
DELETE FROM [table_name];
DELETE 명령은 DML 명령입니다. WHERE 절에 지정된 조건에 따라 테이블에서 모든 행 또는 일부 행을 삭제하는 데 사용할 수 있습니다. 행 잠금을 사용하여 실행되며 테이블의 각 행은 삭제를 위해 잠 깁니다. 트랜잭션 로그를 유지하므로 TRUNCATE보다 느립니다. DELETE 작업은 롤백 할 수 있습니다.
TRUNCATE TABLE [table_name];
TRUNCATE 명령은 테이블에서 모든 행을 제거합니다. 각 행의 삭제를 기록하지 않고 테이블의 데이터 페이지 할당 취소를 기록하므로 DELETE보다 빠릅니다. 테이블 잠금을 사용하여 실행되며 모든 레코드를 제거하기 위해 전체 테이블이 잠 깁니다. DDL 명령입니다. TRUNCATE 작업은 롤백 할 수 없습니다.
TRUNCATE TableA 대신 TableA를 삭제 하시겠습니까? 일반적인 오해는 그들이 같은 일을한다는 것입니다. 별로. 사실 둘 사이에는 많은 차이점이 있습니다.
DELETE는 행별로 기록 된 작업입니다. 즉, 각 행의 삭제가 기록되고 물리적으로 삭제됩니다.
제약 조건을 위반하지 않는 행을 삭제할 수 있으며 외래 키 또는 다른 제약 조건은 그대로 둡니다.
TRUNCATE도 기록 된 작업이지만 다른 방식입니다. TRUNCATE는 데이터가있는 데이터 페이지의 할당 해제를 기록합니다. 데이터 페이지 할당 해제는 데이터 행이 실제로 데이터 페이지에 여전히 존재하지만 범위가 재사용을 위해 비어있는 것으로 표시되었음을 의미합니다. 이것이 TRUNCATE가 DELETE보다 빠른 작업을 수행하게하는 이유입니다.
외래 키 제약 조건이있는 테이블은 TRUNCATE 할 수 없습니다. 제약 조건을 제거하고 테이블을 자르고 제약 조건을 다시 적용해야합니다.
TRUNCATE는 모든 ID 열을 기본 시드 값으로 재설정합니다.
truncate는 모든 행을 제거하지만 테이블 자체는 제거하지 않습니다. 본질적으로 where 절없이 삭제하는 것과 동일하지만 일반적으로 더 빠릅니다.
위의 문장 중 하나에 대한 수정 사항이 있습니다. "자르기를 롤백 할 수 없습니다."
잘라내기를 롤백 할 수 있습니다. 외래 키 참조가있는 경우와 같이 테이블 자르기 또는 삭제를 수행 할 수없는 경우가 있습니다. 월별보고와 같은 작업의 경우 더 이상 필요하지 않으면 테이블을 삭제했을 것입니다. 이 롤업보고를 더 자주 수행하는 경우 테이블을 대신 유지하고 자르기를 사용합니다.
도움이 되었기를 바랍니다. 유용한 정보가 더 있습니다.
자세한 내용은 다음 기사를 참조하십시오. http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx
또한 삭제와 자르기에 대한 자세한 내용은 다음 문서를 참조하세요. http://www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx
감사! 제프
TRUNCATE TABLE은 WHERE 절이없는 DELETE 문과 기능적으로 동일합니다. 둘 다 테이블의 모든 행을 제거합니다. 그러나 TRUNCATE TABLE은 DELETE보다 더 빠르고 시스템 및 트랜잭션 로그 리소스를 적게 사용합니다.
DELETE 문은 한 번에 하나씩 행을 제거하고 삭제 된 각 행에 대한 항목을 트랜잭션 로그에 기록합니다. TRUNCATE TABLE은 테이블의 데이터를 저장하는 데 사용되는 데이터 페이지를 할당 해제하여 데이터를 제거하며 페이지 할당 해제 만 트랜잭션 로그에 기록됩니다.
TRUNCATE TABLE은 테이블에서 모든 행을 제거하지만 테이블 구조와 해당 열, 제약 조건, 인덱스 등은 그대로 유지됩니다. ID가 새 행에 사용하는 카운터는 열의 시드로 재설정됩니다. ID 카운터를 유지하려면 대신 DELETE를 사용하십시오. 테이블 정의 및 해당 데이터를 제거하려면 DROP TABLE 문을 사용합니다.
FOREIGN KEY 제약 조건에서 참조하는 테이블에서는 TRUNCATE TABLE을 사용할 수 없습니다. 대신 WHERE 절없이 DELETE 문을 사용하십시오. TRUNCATE TABLE은 기록되지 않기 때문에 트리거를 활성화 할 수 없습니다.
인덱싱 된 뷰에 참여하는 테이블에는 TRUNCATE TABLE을 사용할 수 없습니다.
에서 http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspx
DELETE
문은 한 번에 하나씩 행을 제거하고 삭제 된 각 행에 대한 항목을 트랜잭션 로그에 기록합니다.TRUNCATE TABLE
테이블 데이터를 저장하는 데 사용되는 데이터 페이지를 할당 해제하여 데이터를 제거하고 트랜잭션 로그에 페이지 할당 해제 만 기록합니다.WHERE
절을 사용할 수 DELETE
있지만TRUNCATE
당신은 그것을 사용할 수 없습니다DELETE
문이 행 잠금을 사용하여 실행되고, 테이블의 각 행은 삭제 잠겨 있습니다.TRUNCATE TABLE
항상 테이블과 페이지를 잠그지 만 각 행은 잠급니다.DELETE
문이 실행될, 테이블은 여전히 삭제 작업이 테이블 잠금을 사용하지 않는 빈 pages.If를 포함 할 수 있습니다, 테이블 (힙)는 많은 빈 페이지가 포함됩니다. 인덱스의 경우 삭제 작업은 빈 페이지를 남겨 둘 수 있지만TRUNCATE TABLE
테이블에서 모든 행을 제거하지만 테이블 구조와 해당 열, 제약 조건, 인덱스 등은 그대로 유지됩니다.DELETE
문은하지 않는 RESEED
ID 열하지만 TRUNCATE
문 RESEEDS
을
IDENTITY
열을TRUNCATE TABLE
과 같은 테이블 에는 사용할 수 없습니다 .
FOREIGN KEY
제약 조건에 . (자신을 참조하는 외래 키가있는 테이블을자를 수 있습니다.)TRUNCATE TABLE
작업이 개별 행 삭제를 기록하지 않기 때문에 트리거를 활성화 할 수 없습니다.문 삭제
Delete Statement delete table rows and return the number of rows is deleted from the table.이 명령문에서는 where 절을 사용하여 테이블에서 데이터를 삭제합니다.
Truncate 문
Truncate 문 테이블에서 모든 행을 삭제하거나 제거했습니다.
Drop 문
Drop 문은 테이블 구조뿐만 아니라 모든 레코드를 삭제했습니다.
지우다
DELETE 명령은 테이블에서 행을 제거하는 데 사용됩니다. WHERE 절은 일부 행만 제거하는 데 사용할 수 있습니다. WHERE 조건을 지정하지 않으면 모든 행이 제거됩니다. DELETE 작업을 수행 한 후 변경 사항을 영구적으로 적용하거나 실행 취소하려면 트랜잭션을 커밋하거나 롤백해야합니다.
자르기
TRUNCATE는 테이블에서 모든 행을 제거합니다. 작업을 롤백 할 수 없습니다. 따라서 TRUCATE가 더 빠르고 DELETE만큼 실행 취소 공간을 많이 사용하지 않습니다.
출처 : http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands