programing

테이블의 모든 행 삭제

nasanasas 2020. 12. 11. 08:16
반응형

테이블의 모든 행 삭제


일반적으로 나는 a를 할 delete * from XXX것이지만 매우 느린이 테이블 에는 일반적으로 약 500k ~ 1m 행이 있습니다 (하나는 varbinary (MAX)입니다).

기본적으로 모든 콘텐츠의 테이블을 비우는 빠른 방법이 있는지 궁금합니다. 실제로 삭제하고 다시 만든 다음 delete SQL 문을 통해 콘텐츠를 삭제하는 것이 더 빠릅니다.

내가 테이블을 다시 만들고 싶지 않은 이유는 과도하게 사용하고 삭제 / 다시 만들면 SQL 서버에서 수집 한 인덱스와 통계가 파괴 될 것이라고 가정하기 때문입니다.

또한 sys.sysindexes를 통해 행 수를 얻는 "영리한"방법이 있기 때문에 이렇게 할 수있는 방법이 있기를 바랍니다. 따라서 콘텐츠를 삭제하는 똑같이 영리한 방법이 있기를 바랍니다.


Truncate table보다 빠릅니다 delete * from XXX. Delete한 번에 한 행씩 작동하기 때문에 느립니다. 자르기가 작동하지 않는 몇 가지 상황이 있습니다 . MSDN에서 읽을 수 있습니다 .


다른 사람들이 말했듯 TRUNCATE TABLE이 훨씬 빠르지 만 몇 가지 제한 사항이 있습니다 ( 여기 에서 가져옴 ).

다음과 같은 테이블에서는 TRUNCATE TABLE을 사용할 수 없습니다.

-FOREIGN KEY 제약 조건에 의해 참조되는 테이블 . (자신을 참조하는 외래 키가있는 테이블을자를 수 있습니다.)
-인덱싱 된 뷰에 참여합니다.
-트랜잭션 복제 또는 병합 복제를 사용하여 게시됩니다.

이러한 특성이 하나 이상있는 테이블의 경우 대신 DELETE 문을 사용합니다.

가장 큰 단점은 비 우려는 테이블에 해당 테이블을 가리키는 외래 키가 있으면 자르기 호출이 실패한다는 것입니다.


해당 테이블의 이름을 바꾸고 동일한 스키마로 테이블을 만든 다음 여유 시간에 원래 테이블을 삭제할 수 있습니다.

[ RENAME TABLE] [1] 및 [ CREATE TABLE] [2] 명령에 대해서는 MySQL 5.1 참조 설명서를 참조하십시오 .

RENAME TABLE tbl TO tbl_old;

CREATE TABLE tbl LIKE tbl_old;

DROP TABLE tbl_old; -- at your leisure

이 접근 방식은 애플리케이션 다운 타임을 최소화하는 데 도움이 될 수 있습니다.


TRUNCATE TABLE을 사용하는 것이 좋습니다. DELETE FROM xxx보다 더 빠르고 리소스를 적게 사용합니다.

다음은 관련 MSDN 기사입니다.


MS SQL Server에서 테이블 자르기

MySQL에서 테이블 자르기

참고 URL : https://stackoverflow.com/questions/1112395/delete-all-rows-in-table

반응형