가장 빠른 방법으로 삭제하는 모든 데이터에서는 대형 테이블

StackOverflow https://stackoverflow.com/questions/64117

  •  09-06-2019
  •  | 
  •  

문제

나는 모두 삭제하는 행 로그에서 테이블을 포함하는 약 5 만 명의 행이 있습니다.나의 처음 시도되었을 다음과 같은 명령을 실행하는 경우에는 쿼리 분석기:

에서 삭제를 client_log

는 매우 오랜 시간이 걸렸다.

도움이 되었습니까?

해결책

체크아웃 테이블 자르 많은 빠릅니다.

다른 팁

내가 발견 테이블 자르 자세한 내용은 msdn transact-SQL 을 참조합니다.모든 관심있는 여기에 설명:

TRUNCATE 테이블과 기능면에서 동일 삭제 문 없 WHERE:모두 제거하는 모든 행 테이블에 있습니다.하지만 자르기 테이블은 더 빠르고 더 적게 사용한 시스템 및 거래 로그인원 삭제합니다.

DELETE 문 행을 제거합니다 한번에 하나의 레코드 항목을 트랜잭션에서 로그를 위한 각 삭제됩니다.TRUNCATE 테이블에 데이터를 제거하여 할당되는 데이터 페이지를 저장하는 데 사용되는 테이블의 데이터는 페이지만 취소는 해당 기록된 트랜잭션에 로그인합니다.

TRUNCATE 테이블을 모두 제거합니다 테이블에서 행하지만,테이블의 구조 및 열,제약,인덱스에 남아 있습니다.카운터를 사용하여 정체성에 대한 새로운 행을 재설정하는 씨앗에 대한 열입니다.하려면 정체성을 유지하기 위해,카운터를 사용하여 삭제를 대신 합니다.를 제거하려면 테이블이 정의하고 해당 데이터를 사용하여 다음의 문입니다.

당신이 사용할 수 없는 자를 테이블의 테이블에서 참조하는 외국 KEY;대신,삭제를 사용하여 문없이는 절이 있습니다.기 때문에 잘라내는 테이블가 로그인하지 않은,그것을 활성화할 수 없습니다.

TRUNCATE 테이블에 사용할 수 없습에 참여하는 테이블이나 인덱스 보기입니다.

일반적인 신화를 자르게 스킵 거래그 합니다.

이것은 오해하고 명확하게 언급에서 MSDN.

이 신화에서 호출은 여러 의견니다 여기에.Let's 하기 위해 함께)

에 대한 참조 테이블 자르 또한 작품에서 MySQL

잊지를 자르고 삭제합니다.유지의 정의 테이블(하고 싶은 경우에 다시 만들다)및 사용 drop table.

나는 다음과 같은 방법을 사용하여 제로아웃 테이블,으로 추가 보너스는 그것이 나와 아카이브를 복사합니다.

CREATE TABLE `new_table` LIKE `table`;
RENAME TABLE `table` TO `old_table`, `new_table` TO `table`;

truncate table SQL-플랫폼 독립적입니다.의심되는 경우 이제까지경 데이터베이스를 공급할 수 있습를 사용할 때에는 매우 조심해야 합니다.

에 SQL 서버가 사용할 수 있습니다 Truncate Table 명령하는 것보다 더 빨리 일정을 삭제하고 또한 적게 사용한 리소스입니다.그것을 다시 설정에 어떤 정체성 분야를 다시 씨는 이 노출되지 않도록 주의하십시오.

의 단점을 자를 수 있는 사용할 수 없습니다 테이블에이 참조하는 외국인 키고 화재 어떤 트리거합니다.또한 당신은 할 수 없 롤백하는 데 문제가 발생하는 경우.

참고는 잘라내는 것 또한 재설정 어떤 자동차 증가하는 경우 키를 사용하고 있습니다.

하지 않으면 잃을하고자하는 당신의 자동차 증가하는 키를 가속화할 수 있는 삭제를 삭제하여 세트에서(예를 들면,테이블에서 삭제 WHERE id>1id < 10000).그것은 속도가 크게 어떤 경우에 데이터를 방지에서 잠겨 있습니다.

그래,삭제 행이 5 백만은 아마도 가을 오랜 시간이 걸릴.유일한 잠재적으로 더 빠른 방법으로 생각할 수 있는 것을 떨어 테이블,그리고 다시 만듭니다.서 작동하는 경우,물론,삭제를 원하는 모든 데이터의 테이블에 있습니다.

truncate table client_log

은 당신의 최선의 방법입니다,자를 죽이고에 있는 모든 콘텐츠 및 인덱스 테이블과 다 씨앗을 가지고 너무입니다.

의 제안"스"하지 않는 것이 좋기 때문에 하나는 바보의 외국 키를 사용합니다.

당신이 사용하는 외국인 키 오른쪽?

를 사용할 수 없는 경우에는 테이블 자르기 때문에 외국의 키 및/또는 트리거를 고려할 수 있습기:

  • 모든 인덱스
  • 지 일반적인 삭제;
  • 다시 만드는 모든 인덱스입니다.

이 속도가 빨라질 수 있습 삭제됩니다.

나는 개정 내 이전 statement:

실시키는 경우에는 회원등록을 말소를 사용하여 잘라내는 데이터가 지워집니다하지만 아무 것도 기록 트랜잭션에 로그인합니다.쓰 로그인 이 왜 삭제 취할 것입에 영원히 5 만의 행이 있습니다.내가 사용하는 자를 자주 하는 동안 개발,하지만 당신이 해야할 에 대한 경계에 그것을 사용하고 생산 기 때문에 데이터베이스할 수 없습니다 롤 다시 변경합니다.야 즉시 전체 데이터베이스 백업을 수행 한 후 잘라내기 설정에 대한 새로운 기준을 복원하였습니다.

위의 문이었하기위한 프롬프트를 당신을 이해해야 합니다 차이가 있습니다.불행하게도,그것이 제대로 기록하고 지원하지 않는 문으로 나지 않은 실제로 어떤 테스트를 자신 있다.그것을 기반으로 문을 들었다.

MSDN:

삭제 문을 제거하는 행나 서 및 기록의 항목 트랜잭션에 대한 로그 각 삭제됩니다.TRUNCATE 테이블을 제거하여 데이터 할당되는 데이터 페이지를 사용하는 저장 테이블의 데이터 및만 페이지 취소는 해당 기록 트랜잭션에 로그인합니다.

나는 그냥 말하고 싶어 있는 기본적인 차이를 두고 있기 때문에 차이가있을 것 어플리케이션 중 하나 또는 기타 부적당할 수 도 있습니다.

DELETE * FROM table_name;

조 최적화할 수 없으므로 위험할 수 있습니다.최적화 의미할 수 있습 뭔가 이상하지만,작동하는 경우에 당신을 활용 할 수 있습니다.

SELECT DbVendor_SuperFastDeleteAllFunction(tablename, BOZO_BIT) FROM dummy;

속도 나는 그것에 따라 달라집...

  • 기본 데이터베이스:Oracle,Microsoft,MySQL,PostgreSQL,다른 사람,사용자 정의...

  • 테이블,그것은 콘텐츠와 관련된 테이블:

될 수 있습 삭제 규칙이 있습니다.은 거기에 기존 절차를 삭제하는 모든 콘텐츠에 테이블?이 될 수 있습니다 최적화에 대한 특정한 기본적인 데이터베이스 엔진?얼마나 관리를 깨는 일들/관련 데이터가?을 수행하는 삭제할 수 있는'안전'방식으로 가정하면 다른 관련된 테이블에 의존하지 않는 이 테이블.기타 테이블을 쿼리와 관련된/에 따라 달라질에서 데이터 이 테이블은?우리가 많이 걱정하지 않는 이것에 대해 테이블 주위에,드롭을 사용하여 수 있는 빠른 방법에 따라 다시 기본 데이터베이스입니다.

DROP TABLE table_name;

얼마나 많은 행 삭제되는?은 거기에 다른 정보에 빠르게 얻을 최적화하는 삭제?예를 들어,우리가 말할 경우 테이블이 이미 비어 있습니까?우리는 말해 있는 경우에는 수백,수천 수백만,수십억의 행?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top