테이블의 모든 행 삭제
보통 나는 할 것입니다.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에서 삭제하는 것보다 빠르고 리소스를 덜 사용하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/1112395/delete-all-rows-in-table
'programing' 카테고리의 다른 글
디렉토리 / 계층 / 트리 구조를 데이터베이스에 저장하는 방법은 무엇입니까? (0) | 2023.07.07 |
---|---|
변수가 해시인지 배열인지 알 수 있는 루비의 우아한 방법은 무엇입니까? (0) | 2023.07.07 |
500.21 불량 모듈 목록의 "Managed Pipeline Handler" (0) | 2023.07.07 |
적용의 FUN에 몇 가지 인수 전달(및 기타 *적용) (0) | 2023.07.07 |
C 조건부 연산자('?')(두 번째 매개 변수가 비어 있음) (0) | 2023.07.07 |