Sql server 빠 른 조건 으로 대량의 데이터 삭제 Truncate

Truncate table Table1 

출처:http://doc.chinaunix.net/sqlserver/200705/203174.shtml 
키워드: DataGuard checkpoint 동적 조회 동의어 SQL 2005 SQL Server 클 러 스 터 마 운 트 해제
본 고 는 Sql server 가 대량의 데 이 터 를 빠 른 조건 으로 삭제 하 는 것 을 상세 하 게 소개 한다.
최근 에 어떤 친구 가 저 에 게 물 었 습 니 다. 그 는 SQLSERVER 에서 수백 만 에서 수천 만 의 데 이 터 를 삭제 하 는 것 이 매우 느 린 것 이 라 고 말 했 습 니 다. 그 를 도와 분석 하고 다음 과 같은 의견 을 제 시 했 습 니 다. 아마도 많은 사람들 에 게 유용 할 것 입 니 다. 게다가 BLOG 를 쓴 적 이 있 는 지 없 는 지 함께 토론 해 보 겠 습 니 다.
하 드 디스크 공간 이 작고 데이터 베 이 스 를 최소 화하 고 싶 지 않 으 면 (다른 정상 적 인 로 그 를 기록 하고 싶 기 때 문) 속도 에 대한 요구 가 높 으 며 모든 데 이 터 를 삭제 하려 면 turncate table 1 을 사용 하 는 것 이 좋 습 니 다. truncate 는 DDL 작업 이기 때문에 rollback 이 발생 하지 않 고 로그 쓰 는 속도 가 빠 릅 니 다. 그리고 증가 하면 1 로 시작 합 니 다.delete 는 rollback 을 생 성 합 니 다. 빅 데이터 양의 표를 삭제 하면 속도 가 느 리 고 많은 rollback segments 를 차지 하 며 G 급 로 그 를 기록 합 니 다.물론 조건 이 있 으 면 where time < 2006 - 3 - 10 '을 삭제 하면 어떻게 합 니까? 로 그 를 기록 하지 않 고 delete 로 대답 하면 안 됩 니 다. SQLServer 엔진 은 디자인 에 있어 delete 작업 에 대해 로그 기록 을 할 것 입 니 다.로그 에 기록 되 지 않 은 문 구 를 강제로 만 들 수 는 없습니다. DeleteTable 1 where Time < 2006 - 3 - 10 '을 실행 할 때 관련 된 기록 이 많 기 때문에 로그 기록 도 상응 하 게 큽 니 다 (3 - 4G). 가능 하 다 면 다음 과 같은 방식 을 사용 하 는 것 을 권장 합 니 다.
새 표 에 저장 할 기록 을 선택 하 십시오.하면, 만약, 만약...
SELECTINTO 의 기록 수 에 따라 로그 가 클 수 있 습 니 다.
  Select*intoTable2FromTable1WhereTime>='2006-03-10'
그리고 바로 Truncate Table 1.어떤 복구 모드 에서 도 로그 기록 을 하지 않 습 니 다.
  TruncatetableTable1
 
마지막 으로 Table 2 를 Table 1 로 바 꿨 습 니 다.
  ECsp_rename'Table2','Table1'
 
    >>더 많은 교류, 오 세 요. ChinaUnix [SQL Server 포럼]:http://it.chinaunix.net/bbs/forum-68-1.html

좋은 웹페이지 즐겨찾기