어떻게 SQLSERVER 에서 대량의 데 이 터 를 신속하게 조건 부 로 삭제 합 니까?

1.SQLSERVER 데이터베이스 에서 bit 형식 으로 변경 not Boolean(즉,true 는 false 로 바 꿉 니 다.false 를 true 로 변경)예:update 시계. set bit 필드=bit 필드-1 최근 에 어떤 친구 가 저 에 게 물 었 습 니 다.그 는 SQLSERVER 에서 수백 만 에서 수천 만 의 데 이 터 를 삭제 하 는 것 이 매우 느 린 것 이 라 고 말 했 습 니 다.그 를 도와 분석 하고 다음 과 같은 의견 을 제 시 했 습 니 다.많은 사람들 에 게 유용 할 지도 모 릅 니 다.게다가 BLOG 를 써 본 적 이 있 는 지 없 는 지 같이 토론 해 보 겠 습 니 다.예 를 들 어 하 드 디스크 공간 이 작 으 면....또한 데이터베이스 로 그 를 최소 화하 고 싶 지 않 습 니 다.(다른 정상 적 인 로 그 를 기록 하고 싶 기 때 문 입 니 다)속도 에 대한 요구 가 높 고 모든 데 이 터 를 삭제 하려 면 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 Mode 근거 Select INTO 의 기록 수,로그 가 클 수 있 습 니 다 Select * into Table2 From Table1 Where Time > = '2006-03-10'  그리고 바로 Truncate. Table1。어떤 복구 모드 에서 도 로그 기록 Truncate 를 하지 않 습 니 다. table Table 1 마지막 으로 Table 2 를 Table 1 EC 로 바 꿨 습 니 다. sp_rename 'Table2', 'Table1'

좋은 웹페이지 즐겨찾기