>데이터 베이스 >MySQL 튜토리얼 >1억 2천만 개의 레코드가 있는 테이블을 효율적으로 업데이트하려면 어떻게 해야 합니까?

1억 2천만 개의 레코드가 있는 테이블을 효율적으로 업데이트하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 11:57:38315검색

How Can I Efficiently Update a Table with 120 Million Records?

1억 2천만 개의 레코드를 위한 업데이트 전략: 효율적인 접근 방식

1억 2천만 개의 레코드가 포함된 테이블을 업데이트하는 것은 어려운 작업이 될 수 있습니다. 기본 업데이트 접근 방식은 리소스를 소모하고 오랜 시간이 걸릴 수 있습니다. 이 문제를 극복하기 위한 보다 효율적인 방법은 SELECT 문을 사용하여 별도의 테이블을 채우는 것입니다.

보조 테이블을 채우는 단계

클러스터형 인덱스가 없는 테이블의 경우 동시 DML이 없는 기간에는 다음 단계를 적용할 수 있습니다.

  1. BaseTable: SELECT 문을 사용하여 dbo.BaseTable의 데이터와 -1로 설정된 새 INT 열을 포함하는 clone.BaseTable을 생성합니다.
  2. 복제 수정: 다시 생성 클론 테이블에 인덱스, 제약 조건 등을 추가합니다.
  3. 스왑 테이블: ALTER SCHEMA ... TRANSFER를 활용하여 원본 테이블과 복제된 테이블을 교환합니다.
  4. 정리: 이전 테이블을 삭제합니다.

테이블의 경우 클러스터형 인덱스 또는 기타 복잡성이 있는 경우 보다 자세한 프로세스는 다음과 같습니다. 필수:

단순하지 않은 시나리오에 대한 세부 프로세스

  1. BaseTable 재생성: 원본 테이블을 클러스터링된 복제 스키마로 복제합니다. 인덱스, ID 열, 계산 열 및 새 INT 열.
  2. 제외 제약 조건: 트리거, 외래 키 제약 조건, 비클러스터형 인덱스 및 검사 제약 조건을 생략합니다.
  3. 테스트 삽입: 복제된 테이블의 유효성을 검사하는 작은 삽입 작업
  4. 복제 잘라내기: 복제 테이블을 지웁니다.
  5. 대량 삽입: 대량 로그 또는 복제 테이블에 대량 삽입을 수행합니다. 단순 복구 모드.
  6. 제약조건 재생성: 모두 재생성 비클러스터형 제약조건, 인덱스, 트리거, 검사 제약조건을 하나씩.
  7. 스키마 전송: 복제된 테이블을 dbo 스키마로, 원본 테이블을 백업 스키마로 이동합니다.
  8. 트루업 작업: 해당되는 경우 필요한 트루업을 수행합니다.

결론

이 선택 및 채우기 접근 방식을 활용하면 대규모 테이블을 효율적으로 업데이트하는 것이 가능해집니다. 이 방법은 테이블 업데이트에 필요한 시간을 크게 줄여 레코드 수가 많은 테이블에 적합한 솔루션입니다.

위 내용은 1억 2천만 개의 레코드가 있는 테이블을 효율적으로 업데이트하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.