문제

보고서 롤업의 일부로 구축 할 테이블이 있습니다. 나중에 전혀 필요하지 않습니다. 누군가가 더 빨리 그들을 자르라고 언급했습니다.

도움이 되었습니까?

해결책

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

Truncate는 일반적으로 매우 빠르며 임시 테이블에서 데이터를 정리하는 데 이상적입니다. 향후 사용을 위해 테이블의 구조를 보존합니다.

실제로 테이블을 제거하려는 경우 정의 데이터뿐만 아니라 테이블을 삭제하십시오.

보다 이 MSDN 기사 더 많은 정보를 위해서

다른 팁

드롭 테이블은 테이블을 삭제합니다.

Truncate 테이블은 비워 지지만 향후 데이터를 위해 구조를 남깁니다.

드롭과 자르기는 다른 일을합니다.

절단 테이블

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

드롭 테이블

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

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

나는 당신이 삭제 테이블과 잘린 테이블의 차이를 의미한다고 생각합니다.

드롭 테이블

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

테이블 삭제

상태가 없으면 모든 행을 삭제합니다. 방아쇠와 참조가 있으면 모든 행에 대해 처리됩니다. 또한 인덱스가 수정됩니다.

절단 테이블

행을 0으로 설정하고 각 행을 기록하지 않습니다. 다른 둘 다보다 훨씬 빠릅니다.

이 답변 중 어느 것도이 두 작업에 대한 중요한 차이를 지적하지 않습니다. 드롭 테이블은 롤백 할 수있는 작업입니다. 그러나 자르기는 롤백 할 수 없습니다 'Truncate Table'도 롤백 할 수 있습니다]. 이런 식으로 매우 큰 테이블을 떨어 뜨리는 것은 많은 행이 있으면 매우 비쌀 수 있습니다. 왜냐하면 롤백을 결정할 경우 임시 공간에 기록되어야하기 때문입니다.

보통, 큰 테이블을 제거하고 싶다면 잘라 내고 떨어 뜨릴 것입니다. 이렇게하면 데이터가 레코드없이 Nixed로 표시되며 테이블을 삭제할 수 있으며 데이터를 기록 할 필요가 없기 때문에 낙하는 매우 저렴합니다.

Truncate가 데이터를 삭제하고 테이블을 남기는 반면 Drop은 실제로 데이터와 테이블 자체를 삭제하는 것이 중요합니다. (외국 키가 그러한 행동을 배제하지 않는다고 가정합니다)

Truncate 테이블은 모든 오래된 인덱싱과 그 내용을 유지합니다. 드롭 테이블은 분명히 테이블을 제거하고 나중에 다시 만들어야합니다.

드롭 테이블

DROP TABLE [table_name];

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

테이블 삭제

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

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

절단 테이블

TRUNCATE TABLE [table_name];

Truncate 명령은 테이블에서 모든 행을 제거합니다. 각 행의 삭제를 기록하지 않고 대신 테이블의 데이터 페이지의 거래를 기록하여 삭제보다 빠릅니다. 테이블 잠금 장치를 사용하여 실행되며 전체 테이블은 모든 레코드를 제거하기 위해 잠겨 있습니다. DDL 명령입니다. 절단 작업은 롤백 할 수 없습니다.

드롭은 테이블을 완전히 제거하여 정의도 제거합니다. Truncate는 테이블을 비우지 만 정의를 제거하지 않습니다.

테이블을 자르면 테이블이 비워집니다. 테이블을 떨어 뜨리면 완전히 삭제됩니다. 어느 쪽이든 빠르지 만 데이터베이스 엔진에 따라 더 빠를 수 있습니다.

더 이상 필요하지 않으면 스키마가 혼란스럽지 않도록 떨어 뜨립니다.

자르기 테이블 대신 탁자를 삭제 하시겠습니까? 일반적인 오해는 그들이 같은 일을한다는 것입니다. 별로. 실제로, 둘 사이에는 많은 차이가 있습니다.

DELETE는 행 당 로그인 작업입니다. 이는 각 행의 삭제가 기록되고 물리적으로 삭제되는 것을 의미합니다.

외국 키나 기타 기부금을 남겨 두는 동안 제약 조건을 위반하지 않는 행을 삭제할 수 있습니다.

Truncate는 또한 기록 된 작업이지만 다른 방식입니다. Truncate는 데이터가 존재하는 데이터 페이지의 거래를 기록합니다. 데이터 페이지의 거래는 데이터 행이 실제로 데이터 페이지에 여전히 존재한다는 것을 의미하지만 범위는 재사용을 위해 비어있는 것으로 표시되었습니다. 이것이 Truncate를 더 빠른 작업으로 삭제하기 위해 더 빠른 작업으로 만드는 이유입니다.

외국의 주요 제약 조건이있는 테이블을자를 수는 없습니다. 금기 사항을 제거하고 테이블을 자르고 금기를 다시 적용해야합니다.

Truncate는 모든 ID 열을 기본 종자 값으로 재설정합니다.

Truncate는 모든 행을 제거하지만 테이블 자체는 아니지만 본질적으로 Where 절이없는 상태에서 삭제하는 것과 동일하지만 일반적으로 더 빠릅니다.

위의 진술 중 하나에 대한 수정이 있습니다 ... "Truncate는 롤백 할 수 없습니다"

자손을 롤백 할 수 있습니다. 외국 키 참조가있을 때와 같이 자르기 또는 드롭 테이블을 할 수없는 경우가 있습니다. 월간보고와 같은 작업의 경우 더 이상 필요하지 않은 일단 테이블을 떨어 뜨릴 것입니다. 이 롤업보고를 더 자주하고 있다면 아마도 테이블을 대신 유지하고 Truncate를 사용합니다.

이것이 도움이되기를 바랍니다. 유용한 정보를 찾을 수있는 더 많은 정보가 있습니다 ...

자세한 내용은 다음 기사를 참조하십시오.http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx

또한 Delete vs. Truncate에 대한 자세한 내용은이 기사를 참조하십시오.http://www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx

감사! 제프

Truncate 테이블은 기능적으로 동일합니다. WHERE 절이없는 상태로 명령문을 삭제하는 것과 동일합니다. 둘 다 테이블의 모든 행을 제거합니다. 그러나 잘린 테이블은 더 빠르며 삭제보다 시스템과 트랜잭션 로그 리소스가 적습니다.

삭제 명령문은 한 번에 하나씩 행을 제거하고 삭제 된 각 행에 대한 트랜잭션 로그의 항목을 기록합니다. Truncate Table은 테이블의 데이터를 저장하는 데 사용되는 데이터 페이지를 거래하여 데이터를 제거하며 페이지 거래 만 트랜잭션 로그에 기록됩니다.

Truncate 테이블은 테이블에서 모든 행을 제거하지만 테이블 구조와 그 열, 제약, 인덱스 등에 남아 있습니다. 새 행의 ID에 의해 사용되는 카운터는 열의 씨앗에 재설정됩니다. ID 카운터를 유지하려면 대신 삭제를 사용하십시오. 테이블 정의 및 데이터를 제거하려면 드롭 테이블 문을 사용하십시오.

외국 키 제약 조건으로 참조 된 테이블에서 자르기 테이블을 사용할 수 없습니다. 대신, where 절없이 삭제 명령문을 사용하십시오. Truncate 테이블이 기록되지 않았으므로 트리거를 활성화 할 수 없습니다.

인덱스 뷰에 참여하는 테이블에는 잘린 테이블을 사용할 수 없습니다.

에서 http://msdn.microsoft.com/en-us/library/aa260621(sql.80).aspx

SQL 표준에서 드롭 테이블은 테이블과 테이블 스키마를 제거합니다. Truncate는 모든 행을 제거합니다.

여기서 답은 질문과 일치하지만 묻지 않은 질문에 대답하겠습니다. "절단 또는 삭제를 사용해야합니까?" 테이블에서 모든 행을 제거하는 경우 일반적으로 훨씬 빠르기 때문에 일반적으로 자르고 싶을 것입니다. 왜 훨씬 빠른가? 적어도 Oracle의 경우, 그것은 높은 물 마크. 이것은 기본적으로 데이터의 부정확성이며 DB가 다른 용도로 재사용 할 수 있습니다.

vs thruncate를 삭제하십시오

  1. 그만큼 DELETE 명령문은 한 번에 하나씩 행을 제거하고 삭제 된 각 행에 대한 트랜잭션 로그의 항목을 기록합니다. TRUNCATE TABLE 테이블 데이터를 저장하는 데 사용되는 데이터 페이지를 처리하여 데이터를 제거하고 트랜잭션 로그의 페이지 거래 만 기록합니다.
  2. 우리는 사용할 수 있습니다 WHERE 조항 DELETE 그러나 TRUNCATE 당신은 그것을 사용할 수 없습니다
  3. DELETE 행은 행 잠금을 사용하여 실행되며 테이블의 각 행은 삭제를 위해 잠겨 있습니다. TRUNCATE TABLE 항상 테이블과 페이지를 잠그지 만 각 행은 아닙니다.
  4. DELETE 명령문이 실행되면 테이블에 여전히 빈 페이지가 포함될 수 있습니다. 삭제 작업에 테이블 잠금 장치를 사용하지 않으면 테이블 (HEAP)에는 많은 빈 페이지가 포함됩니다. 인덱스의 경우 삭제 작업은 빈 페이지 뒤에 남을 수 있지만
    백그라운드 정리 과정으로 페이지를 신속하게 처리합니다.
  5. TRUNCATE TABLE 테이블에서 모든 행을 제거하지만 테이블 구조와 그 열, 제약, 인덱스 등에 남아 있습니다.
  6. DELETE 진술이 아닙니다 RESEED 신원 열이지만 TRUNCATE 성명 RESEEDS 그만큼IDENTITY
  7. 당신은 사용할 수 없습니다 TRUNCATE TABLE 테이블에 :
    1. a FOREIGN KEY 강제. (자체를 참조하는 외국 키가있는 테이블을 자울 수 있습니다.)
    2. 인덱스 뷰에 참여하십시오.
    3. 트랜잭션 복제 또는 병합 복제를 사용하여 게시됩니다
  8. TRUNCATE TABLE 작업이 개별 행 삭제를 기록하지 않기 때문에 트리거를 활성화 할 수 없습니다.

명세서를 삭제하십시오

삭제 명령문 삭제 테이블 행을 삭제하고 반환 행 수가 표에서 삭제됩니다.

  • 삭제 명령문은 레코드가 하나씩 삭제 되었기 때문에 자르기 명령문보다 느립니다.

진술을 잘라냅니다

Truncate 문은 테이블에서 모든 행을 삭제하거나 제거합니다.

  • 테이블에서 모든 레코드를 삭제했기 때문에 삭제 명령문보다 빠릅니다.
  • Truncate 문장을 반환하지 않음 표에서 행의 노가 삭제됩니다.

드롭 문

Drop Statement는 모든 레코드와 테이블의 구조를 삭제했습니다.

삭제

삭제 명령은 테이블에서 행을 제거하는 데 사용됩니다. A 절을 사용하여 일부 행만 제거 할 수 있습니다. 상태가 지정되지 않은 경우 모든 행이 제거됩니다. 삭제 작업을 수행 한 후에는 변경을 영구적으로 만들거나 취소하려면 거래를 커밋하거나 롤백해야합니다.

잘라

Truncate는 테이블에서 모든 행을 제거합니다. 작업은 롤백 할 수 없습니다 ... 따라서 트루케이트가 더 빠르며 삭제만큼 실행 취소 공간을 사용하지 않습니다.

에서: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

하락전체 테이블과 모든 구조를 떨어 뜨립니다

잘라테이블에서 모든 행을 삭제하는 것은 삭제와 다르면 행의 인덱스도 삭제하는 것과 다릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top