많은 열을 비교해야하는 병합 문이 있습니다. 원본 테이블에는 26,000 개의 행이 있습니다. 대상 테이블에는 수백만 개의 행이 있습니다. Desintation 테이블은 int 유형 컬럼에 대한 일] 기본 키 인덱스 만 갖습니다.SQL Server 병합 및 인덱싱 속도
소스에서 고유 값의 수를 계산하려면 group by를 사용하여 일부 선택을했습니다.
병합의 테스트 부분은
Merge Into desttable
Using #temptable
On
(
desttable.ColumnA = #temptable.ColumnA
and
desttable.ColumnB = #temptable.ColumnB
and
desttable.ColumnC = #temptable.ColumnC
and
desttable.ColumnD = #temptable.ColumnD
and
desttable.ColumnE = #temptable.ColumnE
and
desttable.ColumnF = #temptable.ColumnF
)
When Not Matched Then Insert Values (.......)
-- ColumnA: 167 unique values in #temptable
-- ColumnB: 1 unique values in #temptable
-- ColumnC: 13 unique values in #temptable
-- ColumnD: 89 unique values in #temptable
-- ColumnE: 550 unique values in #temptable
-- ColumnF: 487 unique values in #temptable
-- ColumnA: 3690 unique values in desttable
-- ColumnB: 3 unique values (plus null is possible) in desttable
-- ColumnC: 1113 unique values in desttable
-- ColumnD: 2662 unique values in desttable
-- ColumnE: 1770 unique values in desttable
-- ColumnF: 1480 unique values in desttable
병합 지금 매우, 매우 오랜 시간이 걸립니다. 내 기본 키를 변경해야하지만 가장 좋은 전략이 무엇인지 모릅니다. 첫 번째 병합에는 26,000 개의 행을 삽입 할 수 있지만 후속 병합에는 ~ 2,000 개의 삽입 만 수행 할 수 있습니다. 색인이없고 단순한 PK 만 있기 때문에 모든 것이 느립니다. :)
더 나은 방법을 알려줄 수 있습니까?
감사합니다.
현재 병합이 어떻게 작동하는지 알아야합니다. 현재 열거 한 6 개 열의 평등을 확인합니까? 대체 키입니까? 그렇다면 이러한 열에 대해 고유 한 복합 색인이 있습니까? 이 열은 어떤 데이터 유형입니까? 큰 경우 체크섬 추가를 고려 했습니까? –
스키마 및 인덱스를 추가하고 쿼리 할 수 있습니까? 더 많은 열에 인덱스가 필요하지만 더 많은 정보가 필요합니다 ... – gbn
역겨운 표현은 강한 의미입니다. 나는 게으르다. 게으름이 고쳤다. 미안, 아베. – Snowy