2010-04-21 5 views
0

보고 및 기록 목적으로 데이터가 유지되는 매우 큰 테이블에 대한 전략을 찾고, 그 데이터의 아주 작은 하위 집합이 일상 작업에 사용됩니다.DB 높은 읽기 테이블 (SQL Server)에 삽입하기위한 전략

배경 :

우리는 지속적으로 우리의 소비자 직면 사이트에서 업데이트 방문자 및 방문 테이블을 가지고있다. 이 표에는 봇과 크롤러를 비롯한 모든 방문 및 방문자에 대한 정보가 포함되어 있습니다.

Google의 백 엔드 사이트는 프런트 엔드 사이트에서 방문자 (리드)를 관리 할 수 ​​있습니다. 대부분의 관리는 방문자 중 일부 (리드가되는 방문자)에서 발생합니다. 방문자 및 방문 테이블의 대다수 데이터는 사용자 활동의 훨씬 작은 하위 집합 (기본적으로보고 유형 기능)에 대해서만 유지 관리됩니다. 이는 색인 생성 문제가 아니며, 우리는 색인 생성 및 색인 생성을 깨끗하고 작고 단편화되지 않은 채로 할 수 있습니다.

ps : 현재 데이터웨어 하우스에 대한 예산이나 전문 지식이 없습니다.

문제는 :

우리는 그들이, 예를 들어, 할당 된 리드의 목록을 조회 할 때 우리의 최종 사용자에게 더 반응 할 시스템을 싶습니다. 현재 쿼리는 대개 관련성이없는 데이터의 거대한 데이터 세트에 대한 것입니다.

몇 가지 아이디어를 숙고하고 있습니다. 하나는 새로운 테이블과 상당히 큰 재 구조를 포함하고 있습니다. 나는 그것에 대한 도움을 요청하지 않습니다. 다른 하나는 중복 된 데이터 (예 : Visitor_Archive 및 Visitor_Small 테이블)를 만드는 것입니다. 삽입 및 기록 /보고를 위해보다 큰 방문자 및 방문 테이블이 존재하고, 리드 관리, 이메일 리드, 전화 리드 필요에 대한 더 작은 visitor1 테이블이 존재합니다 수 등 리드의 내 목록 ..

나는 밖으로 도달하고 그 이유는 내가 Visitor_Archive 및 동기화에 Visitor_Small 테이블을 유지하는 최선의 방법에 대한 의견을 사랑하는 것입니다

...

복제해야합니까? 복제를 사용하여 특정 열 값 (FooID = x)의 데이터 만 복제 할 수 있습니까?

다른 전략은 있습니까?

답변

1

당신의 테이블이 파티셔닝을위한 완벽한 후보라고 들리는군요. 언급하지 않았으므로 간단히 설명하고 일부 링크를 제공 할 것입니다.

여러 물리적 또는 논리적 장치에 걸쳐 테이블/색인의 행을 나눌 수 있으며 특히 데이터의 알려진 하위 집합 만 필요할 때 데이터 집합의 성능을 향상시킬 수 있습니다.테이블을 분할하면 여전히 하나의 테이블로 상호 작용할 수 있지만 쿼리에서 파티션이나 다른 것을 참조 할 필요는 없습니다. 그러나 SQL Server는 데이터의 한 파티션 만 포함하는 쿼리에 대해 여러 최적화를 수행 할 수 있습니다. 실제로 Designing Partitions to Manage Subsets of Data에서 AdventureWorks 예제는 정확한 시나리오와 거의 일치합니다.

여기에서 시작하여 아래로 일하는 연구가 조금 있습니다. Partitioned Tables and Indexes.

0

간단한 해결책 : 모든 필드가있는 별도의 테이블을 만들고 정규화되지 않은 테이블을 만듭니다. 일정에 따라이 테이블을 업데이트하는 저장 프로 시저를 만듭니다. SP를 호출 할 SQl 에이전트 작업을 만듭니다.

쿼리 방식을 테이블에 색인화하십시오.

히스토리를 제거해야하는 경우이를 보관할 다른 테이블을 만들고 히스토리 데이터를 채우고 주 보고서 테이블을 정리할 다른 SP를 만듭니다.

요즘에는 공간이 많아서 여러 개의 보고서 테이블을 만들 수 있습니다. 괜찮습니다.