SQL SERVER 에서 대량의 데 이 터 를 빠 르 고 조건 부 로 삭제 하 는 방법

최근 한 친구 가 SQLSERVER 에서 수백 만 에서 수천 만 데 이 터 를 삭제 하 는 것 이 매우 느리다 고 물 었 다.그 를 도와 분석 하고 다음 과 같은 의견 을 제시 하면 많은 사람들 에 게 유용 할 지도 모른다.    하 드 디스크 공간 이 작고 데이터 베 이 스 를 최소 화하 고 싶 지 않 으 면(다른 정상 적 인 로 그 를 기록 하고 싶 기 때 문)속도 에 대한 요구 가 높 으 며 모든 데 이 터 를 삭제 하 는 것 은 turncate 를 사용 하 는 것 을 권장 합 니 다. table 1,truncate 때문에 DDL 동작 입 니 다.rollback 이 발생 하지 않 고 로그 쓰 지 않 는 속도 가 빠 릅 니 다.그리고 증가 하면 1 로 회복 되 고 delete 는 rollback 이 발생 합 니 다.빅 데이터 양의 표를 삭제 하면 속도 가 느 리 고 많은 rollback 을 차지 합 니 다. segments,G 레벨 로그 도 기록 해 야 합 니 다. ;물론 조건 이 있 으 면 삭제 합 니 다.예 를 들 어 where. time〈'2006-3-10' 어 떡 해,로 그 를 기록 하지 않 고 delete 로 대답 하면 안 돼,SQL Server 엔진 은 디자인 에 있어 서 맞 을 거 예요. Delete 작업 진행 로그 기록.로그 에 기록 되 지 않 은 문 구 를 강제로 만 들 수 는 없다. Delete Table1 where Time 〈 '2006-3-10' 관련 된 기록 이 비교적 많 기 때문에 로그 기록 도 상응 하 게 크다(3-4G).가능 하 다 면 다음 과 같은 방식 을 사용 하 는 것 을 권장 합 니 다.    새 표 에 저장 할 기록 을 선택 하 십시오.하면,만약,만약... Full Recovery SELECT 에 따 른 모드 INTO 의 기록 수,로그 가 클 수 있 습 니 다 Select * into Table2 From Table1 Where Time 〉 = '2006-03-10'     그리고 바로 Truncate. Table1。어떤 복구 모드 에서 도 로그 기록 을 하지 않 습 니 다:Truncate table Table1     마지막 으로 Table 2 를 Table 1:EC 로 바 꿨 습 니 다. sp_rename 'Table2', 'Table1'

좋은 웹페이지 즐겨찾기