2010-12-04 6 views
1

SQL Server 데이터베이스에서 '일반적인'사용 규칙을 따르지 않고 클러스터 된 인덱스와 관련된 몇 가지 조언을 찾고있는 고유 한 테이블이 있습니다.SQL Server "Write Once"테이블 클러스터 된 인덱스

이것은 작성된 예제이지만 실제 데이터를 매우 자세히 설명합니다.

이 테이블에는 다른 테이블의 외래 키인 3 열 기본 키와 관련 데이터가 들어있는 네 번째 필드가 있습니다. 예를 들어, 테이블이 같다고 가정 해 봅시다 :

CREATE TABLE [dbo].[WordCountsForPage](
[AuthorID] [int] NOT NULL, 
[BookID] [int] NOT NULL, 
[PageNumber] [int] NOT NULL, 
[WordCount] [int] NOT NULL 
) 

그래서, 우리는 고유 한 데이터가 네 번째 필드 인으로, 다소 계층 기본 키를 가지고있다.

실제 응용 프로그램에는 총 28 억 개의 가능한 레코드가 있지만 그게 전부입니다. 데이터는 시간이 지남에 따라 계산되므로 즉석에서 만들어지며 실제적으로 해당 레코드의 1/4 만 실제로 계산됩니다. 연산은 값 비싼 연산이기 때문에 DB에 저장되며 각 고유 조합에 대해 한 번만 수행하려고합니다.

오늘 데이터는 분당 수천 번 읽히지 만, (적어도 지금은) 테이블이 자체적으로 채워지면서 분당 수백 개의 삽입이 있습니다 (그리고 이것은 꽤 오랫동안 계속 될 것입니다). 모든 삽입물 (오늘)에 대해 10 개의 읽기가 있다고 말합니다.

클러스터 된 인덱스로 인해 모든 삽입에서 성능이 저하되는지 궁금합니다.

테이블이 이면 결국이 읽기 ​​전용이되므로 클러스터 된 인덱스는 "장기적으로"의미가 있지만 거기에 도달하는 데는 약간의 시간이 걸립니다.

무거운 삽입 기간 동안 인덱스를 클러스터되지 않은 상태로 만들 수 있고 테이블이 채워지면서 클러스터로 변경한다고 가정합니다. 그러나 크로스 오버 포인트가 언제 결정되는지 어떻게 알 수 있습니까? 앞으로 나 자신이 '시간이왔다')?

내가 정말로 필요로하는 것은 미래에 어떤 불가사의 한 시간에 클러스터되지 않은 상태에서 클러스터 된 상태로 전환되는 전환 가능한 색인입니다.

어떻게 처리할까요?

답변

3

실제로 클러스터되지 않은 색인을 먼저 가지고 클러스터 된 색인으로 변환하려고합니다. (그 혼자서는 정말 혼란 스럽습니다!) 나중에. 인덱싱의 여왕으로

, 킴벌리 트립, 실제로 당신의 INSERT 성능을 향상시킬 수있는 테이블에 클러스터 된 인덱스를 가진 그녀의 The Clustered Index Debate Continues..에 대해 설명합니다!

삽입은 힙과 비교할 때 클러스터 된 테이블 (단, "오른쪽"클러스터 된 테이블에만 있음)에 이 더 빠름 (). 여기서 가장 중요한 문제는 IAM/PFS에서 힙의 삽입 위치를 확인하는 검색이 클러스터 된 테이블 (클러스터 된 키로 정의 된 삽입 위치를 알고있는 경우)보다 느리다는 것입니다. 인서트는 주문이 정의 된 테이블 (CL)에 삽입 될 때와 주문이 계속 증가하는 곳에서 더 빠릅니다.

힙은 클러스터 된 인덱스가 정의되지 않은 테이블입니다.

이 점을 고려하면 힙에서 클러스터 된 인덱스가있는 테이블로 이동하는 데 드는 노력과 번거 로움을 느끼지 않을 것입니다. 색인을 정의하고 해당 테이블을 사용하기 시작하십시오!

+0

감사합니다. 예, 저는 실제로이 기사를 읽기 전에 여기에서 읽었습니다. 문제는 색인이 "계속 증가"하지 않는다는 것입니다. 데이터가 테이블에 들어오는 순서는 없습니다. – Flipster

+0

안녕하세요. 나는 그 반응에 감사한다. 나는 어느 쪽이든 성능상의 문제가 없으므로, 귀하의 응답을 여기에서 가장 좋은 것으로 받아들이고 있습니다 (윙크). 감사! – Flipster