테이블의 모든 행 삭제
일반적으로 나는 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 기사입니다.
참고 URL : https://stackoverflow.com/questions/1112395/delete-all-rows-in-table
'programing' 카테고리의 다른 글
소켓 io 연결 인증 (0) | 2020.12.11 |
---|---|
MacOS에서 프로세스를 종료하는 방법은 무엇입니까? (0) | 2020.12.11 |
Spark DataFrame groupBy 및 내림차순 정렬 (pyspark) (0) | 2020.12.10 |
AWS Lambda API 게이트웨이 오류 "잘못된 Lambda 프록시 응답" (0) | 2020.12.10 |
JAVA_HOME이 잘못된 디렉토리로 설정되었습니다. (0) | 2020.12.10 |