잘라 내기 / 대형 삽입 후 인덱스를 다시 작성해야합니까?


10

새 데이터를 삽입하기 전에 (다른 테이블의 데이터, 계산 등) 삽입하기 전에 약 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를 잘 아는 개발자가 더 정확합니다!


테이블 구조, 현재 존재하는 인덱스 및 삽입되는 데이터의 모양에 대한 추가 정보가 도움이 될 것입니다 (특정 순서로되어 있습니까? 또한이 프로세스가 완료 될 때 까지이 테이블을 사용할 수 없다고 가정합니까? 대량 가져 오기 옵션이 있다는 것을 알고 있으면 좋습니다.
Mike Walsh

테이블 삽입을 잘라내어 인덱스 조각화가 무엇인지 확인해야 할 수도 있습니다.
Zane

v : 2008 표준. 소스 데이터는 csv, excel, Oracle 및 기타 SQL db에서이 데이터를로드하기 전에 여러 준비 테이블입니다. 이 단계에서 테이블 구조는 모두 동일합니다 : 6 문자 ID, 3 문자 코드, 10 cols decimal (20,5). 기본 키는 ID + 코드입니다. 데이터가로드되고 insert into현재 order by조항이 없지만 도움이된다면 추가 할 수 있습니까? ID와 코드도 별도로 색인됩니다.
BlueChippy

답변:


6

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


1

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

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.