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'도 롤백 할 수 있습니다]. 이러한 방식으로 매우 큰 테이블을 삭제하는 것은 많은 행이있는 경우 매우 비용이 많이들 수 있습니다. 롤백하기로 결정한 경우 모두 임시 공간에 기록되어야하기 때문입니다.
일반적으로 큰 테이블을 제거하려면 테이블을 자른 다음 삭제합니다. 이렇게하면 데이터가 기록없이 제거되고 테이블이 삭제 될 수 있으며 데이터를 기록 할 필요가 없기 때문에 삭제 비용이 매우 저렴합니다.
자르기는 데이터를 삭제하고 테이블을 떠나는 반면, 드롭은 실제로 데이터와 테이블 자체를 삭제한다는 점을 지적하는 것이 중요합니다. (외래 키가 그러한 작업을 배제하지 않는다고 가정)
TRUNCATE TABLE은 모든 이전 인덱싱 및 기타 사항을 유지합니다. DROP TABLE은 분명히 테이블을 제거하고 나중에 다시 만들어야합니다.
Drop은 테이블을 완전히 제거하고 정의도 제거합니다. 잘라내 기는 테이블을 비우지 만 정의를 제거하지는 않습니다.
테이블을 자르면 테이블이 비워집니다. 테이블을 삭제하면 완전히 삭제됩니다. 둘 중 하나는 빠르지 만 삭제하는 것이 더 빠를 것입니다 (데이터베이스 엔진에 따라 다름).
더 이상 필요하지 않으면 스키마를 복잡하게 만들지 않도록 삭제하십시오.
TRUNCATE TableA 대신 TableA를 삭제 하시겠습니까? 일반적인 오해는 그들이 같은 일을한다는 것입니다. 별로. 사실 둘 사이에는 많은 차이점이 있습니다.
DELETE는 행별로 기록 된 작업입니다. 즉, 각 행의 삭제가 기록되고 물리적으로 삭제됩니다.
제약 조건을 위반하지 않는 행을 삭제할 수 있으며 외래 키 또는 다른 제약 조건은 그대로 둡니다.
TRUNCATE도 기록 된 작업이지만 다른 방식입니다. TRUNCATE는 데이터가있는 데이터 페이지의 할당 해제를 기록합니다. 데이터 페이지 할당 해제는 데이터 행이 실제로 데이터 페이지에 여전히 존재하지만 범위가 재사용을 위해 비어있는 것으로 표시되었음을 의미합니다. 이것이 TRUNCATE가 DELETE보다 빠른 작업을 수행하게하는 이유입니다.
외래 키 제약 조건이있는 테이블은 TRUNCATE 할 수 없습니다. 제약 조건을 제거하고 테이블을 자르고 제약 조건을 다시 적용해야합니다.
TRUNCATE는 모든 ID 열을 기본 시드 값으로 재설정합니다.
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는 모든 행을 제거하지만 테이블 자체는 제거하지 않으며 본질적으로 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 is functionally identical to DELETE statement with no WHERE clause: both remove all rows in the table. But TRUNCATE TABLE is faster and uses fewer system and transaction log resources than DELETE.
The DELETE statement removes rows one at a time and records an entry in the transaction log for each deleted row. TRUNCATE TABLE removes the data by deallocating the data pages used to store the table's data, and only the page deallocations are recorded in the transaction log.
TRUNCATE TABLE removes all rows from a table, but the table structure and its columns, constraints, indexes and so on remain. The counter used by an identity for new rows is reset to the seed for the column. If you want to retain the identity counter, use DELETE instead. If you want to remove table definition and its data, use the DROP TABLE statement.
You cannot use TRUNCATE TABLE on a table referenced by a FOREIGN KEY constraint; instead, use DELETE statement without a WHERE clause. Because TRUNCATE TABLE is not logged, it cannot activate a trigger.
TRUNCATE TABLE may not be used on tables participating in an indexed view.
From http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspx
In the SQL standard, DROP table removes the table and the table schema - TRUNCATE removes all rows.
The answers here match up to the question, but I'm going to answer the question you didn't ask. "Should I use truncate or delete?" If you are removing all rows from a table, you'll typically want to truncate, since it's much much faster. Why is it much faster? At least in the case of Oracle, it resets the high water mark. This is basically a dereferencing of the data and allows the db to reuse it for something else.
DELETE VS TRUNCATE
- The
DELETE
statement removes rows one at a time and records an entry in the transaction log for each deleted row.TRUNCATE TABLE
removes the data by deallocating the data pages used to store the table data and records only the page deallocations in the transaction log - We can use
WHERE
clause inDELETE
but inTRUNCATE
you cannot use it - When the
DELETE
statement is executed using a row lock, each row in the table is locked for deletion.TRUNCATE TABLE
always locks the table and page but not each row - After a
DELETE
statement is executed, the table can still contain empty pages.If the delete operation does not use a table lock, the table (heap) will contain many empty pages. For indexes, the delete operation can leave empty pages behind, although these
pages will be deallocated quickly by a background cleanup process TRUNCATE TABLE
removes all rows from a table, but the table structure and its columns, constraints, indexes, and so on remainDELETE
statement doesn'tRESEED
identity column butTRUNCATE
statementRESEEDS
theIDENTITY
column- You cannot use
TRUNCATE TABLE
on tables that:- Are referenced by a
FOREIGN KEY
constraint. (You can truncate a table that has a foreign key that references itself.) - Participate in an indexed view.
- Are published by using transactional replication or merge replication
- Are referenced by a
TRUNCATE TABLE
cannot activate a trigger because the operation does not log individual row deletions
Delete Statement
Delete Statement delete table rows and return the number of rows is deleted from the table.in this statement, we use where clause to deleted data from the table
- Delete Statement is slower than Truncate statement because it deleted records one by one
Truncate Statement
Truncate statement Deleted or removing all the rows from the table.
- It is faster than the Delete Statement because it deleted all the records from the table
- Truncate statement not return the no of rows are deleted from the table
Drop statement
Drop statement deleted all records as well as the structure of the table
DELETE
The DELETE command is used to remove rows from a table. A WHERE clause can be used to only remove some rows. If no WHERE condition is specified, all rows will be removed. After performing a DELETE operation you need to COMMIT or ROLLBACK the transaction to make the change permanent or to undo it.
TRUNCATE
TRUNCATE removes all rows from a table. The operation cannot be rolled back ... As such, TRUCATE is faster and doesn't use as much undo space as a DELETE.
From: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
Drop drop whole table and all its structure
truncate delete all rows from table it is different from delete that it also delete indexes of rows
참고URL : https://stackoverflow.com/questions/135653/difference-between-drop-table-and-truncate-table
'developer tip' 카테고리의 다른 글
ImageMagick : 변환 실행 중 오류 : 변환 : 글꼴을 읽을 수 없음 (0) | 2020.10.21 |
---|---|
클래스 멤버를 사용한 C ++ 콜백 (0) | 2020.10.21 |
Android에서 HTML 태그를 제거하거나 이스케이프하는 방법 (0) | 2020.10.20 |
UIImagePickerController에서 여러 이미지를 선택하는 방법 (0) | 2020.10.20 |
Django : 'current_tags'는 유효한 태그 라이브러리가 아닙니다. (0) | 2020.10.20 |