잘라 내기 / 대형 삽입 후 인덱스를 다시 작성해야합니까? 테이블의 데이터,

새 데이터를 삽입하기 전에 (다른 테이블의 데이터, 계산 등) 삽입하기 전에 약 1.75M 행으로 일부 테이블을 자르는 저장 프로 시저가 있습니다.

기본 개요는 매우 간단합니다.

  • 테이블 자르기
  • 시간당 약 75,000의 ‘배치’에 1.75M 행을 삽입하십시오.

이 프로세스에서 언제든지 인덱스를 명시 적으로 다시 작성해야하는지 궁금합니다. 예 :

  • 테이블 자르기
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [또는 비슷한 것]
  • 1.75M 행 삽입

또는 아마도

  • ALTER INDEX ALL ON xxx DISABLE
  • 테이블 자르기
  • 1.75M 행 삽입
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [또는 비슷한 것]

DBA가 아닌 모든 지원에 감사드립니다 .DB를 잘 아는 개발자가 더 정확합니다!



답변

이 유형의 대부분의 질문과 마찬가지로 다릅니다. 관련된 모든 인덱스에 대해 “올바른”순서로 데이터를 삽입하지는 않을 것입니다. 즉, 해당 인덱스 모두 삽입 프로세스 중에 많은 페이지 분할이 발생할 가능성이 있습니다. 클러스터 된 인덱스 순서로 삽입한다고 가정하겠습니다. 모든 비 클러스터형 인덱스를 비활성화하고 잘라 내고 삽입 한 다음 모든 비 클러스터형 인덱스를 다시 작성할 수 있습니다. 물론 두 가지 접근법을 모두 시도하면 그 뒤에있는 이론에 관계없이 진실이 더 빠릅니다. 🙂


답변

모든 인덱스가 활성화 된 Plan Basic은 느리고 단편화 될 수 있습니다.

잘린 테이블과 빈 테이블의 ALTER INDEX REBUILD는 용도가 없으므로 계획 A를 수정해야합니다.

  • 절단
  • 끼워 넣다
  • 인덱스 교체가 변경됨

속도가 느려질 수 있지만 최소한 날카로운 인덱스가 나타납니다.

계획 B는 괜찮습니다. 세 가지를 모두 테스트하여 가장 빠르며 인덱스 조각화가 가장 적은 것을 확인하십시오. 그런 다음 재건이 가치가 있는지 결정하십시오.


답변