programing

테이블의 모든 행 삭제

topblog 2023. 7. 7. 18:27
반응형

테이블의 모든 행 삭제

보통 나는 할 것입니다.delete * from XXX그러나 이 테이블은 매우 느립니다. 일반적으로 약 500k ~ 1m의 행이 있습니다(이 값이 모이면 1개의 행이 varbinary(MAX)).

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

테이블을 다시 만들고 싶지 않은 이유는 테이블이 많이 사용되고 삭제/다시 만들기 때문입니다. sql server에서 수집한 인덱스와 통계가 삭제될 것으로 가정합니다.

저는 또한 sys.sysindexs를 통해 행 수를 얻는 "똑똑한" 방법이 있기 때문에 이것을 할 수 있는 방법이 있기를 바랍니다, 그래서 저는 콘텐츠를 삭제하는 똑같이 영리한 방법이 있기를 바랍니다.

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

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

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

외부 키 제약 조건에 의해 참조됩니다. 자신을 참조하는 외부 키가 있는 테이블을 잘라낼 수 있습니다.
인덱싱된 보기에 참여합니다.
트랜잭션 복제 또는 병합 복제를 사용하여 게시됩니다.

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

가장 큰 단점은 비우려는 테이블에 외부 키가 있으면 잘라내기 호출이 실패한다는 것입니다.

문제의 테이블 이름을 변경하고 동일한 스키마를 사용하여 테이블을 만든 다음 원래 테이블을 삭제할 수 있습니다.

[에 대한 MySQL 5.1 참조 설명서 참조]RENAME TABLE][1] 및 [CREATE TABLE][2] 명령입니다.

RENAME TABLE tbl TO tbl_old;

CREATE TABLE tbl LIKE tbl_old;

DROP TABLE tbl_old; -- at your leisure

이 방법을 사용하면 애플리케이션 다운타임을 최소화할 수 있습니다.

잘라내기 테이블을 사용하는 것이 좋습니다. xxx에서 삭제하는 것보다 빠르고 리소스를 덜 사용하는 것이 좋습니다.

여기 관련 MSDN 기사가 있습니다.

MS SQL Server에서 테이블 잘라내기

Mysql에서 테이블 잘라내기

언급URL : https://stackoverflow.com/questions/1112395/delete-all-rows-in-table

반응형