우리는 "축소"하려는이 큰 데이터베이스 (> 1TB)를 가지고 있습니다. 데이터베이스는 하나의 주 엔터티를 중심으로 진행됩니다. "방문"이라고합니다. 토론을 위해 그것이 의료 행위를위한 데이터베이스라고 가정 해 봅시다.
절차, 연간, 후속 조치, 예방 접종 등과 같은 총 30 개의 방문 "유형"이 있으며, 각각 "방문"에 대한 보조 테이블 (예 : "visit_immuno")입니다.
데이터베이스는 2000 년 이후 약 12 년간의 데이터를 축적했습니다. 누군가가 "라이브"버전에 약 3 년의 데이터를 보관하고 나머지는 "old_data"데이터베이스에 보관할 것을 제안했습니다. 날짜는 정규화 된 이후 "방문"테이블에만 저장됩니다. 방문 테이블에는 ROWVERSION
열과 BIGINT
의사 ID (클러스터) 열도 포함됩니다. 모든 의도와 목적을 위해 클러스터링 키가 SEQUENCE (SQL Server 2012 Enterprise)로 채워져 있다고 가정 해 보겠습니다 cid
.
(가) visit.date
의사가 확장의 방문 및 데이터의 그의 "서류 가방"을 반환에 갈 때, 예를 들어 클러스터링 키와 같은 순서로 항상 아니라, 메인 테이블에 병합됩니다. 원인 것 "방문"테이블에 일부 업데이트도 있습니다 ROWVERSION
열이 모두와 동기화로 cid
하고 date
간단히 말해,도 - 열 ROWVERSION
이나 cid
이러한 이유에 적합한 파티션 키를 만들 것입니다.
"라이브"에서 데이터를 제거하기위한 비즈니스 규칙은이 있다는 것입니다 visit.date
이상 36개월해야 하고 자식 visit_payment
레코드가 존재해야합니다. 또한 "old_data"데이터베이스에는를 제외한 기본 테이블이 없습니다 visit%
.
그래서 우리는 다음과 같이 끝납니다.
라이브 DB (일일 사용)-모든 테이블 Old-Data DB- visit%
테이블의 이전 데이터
이 제안 은 (제외 ) 의 모든 기본 테이블에 대한 동의어 를 포함하는 쉘인 결합 된 DB 와 두 데이터베이스 의 테이블에서 UNION ALL의 뷰 를 요구 합니다.Live DB
visit%
visit%
Old-Data
DB 에서 동일한 인덱스가 생성되었다고 가정하면 쿼리는 UNION-ALL Views ? 어떤 유형의 쿼리 패턴이 UNION-ALL 뷰 의 실행 계획을 넘어 설 수 있습니까?