2012-03-28 2 views
4

열 저장소 인덱스의 이점 중 하나는 단일 열의 데이터가 "서로 디스크에 저장"된다는 점입니다. 이것은 더 나은 압축과 더 빠른 읽기 시간을 의미합니다.SQL Server 2012 : 성능 열 저장소 인덱스 대 B- 트리

그러나; B-tree (일반 비 클러스터형 인덱스)를 사용할 때 해당 트리의 리프가 데이터 자체가 아닌가? 그래서 열 A에 대한 색인을 만들 때, 열 A의 모든 필드가 테이블에 평행하게 디스크에 정렬 된 것처럼 보이지 않습니까? 이는 데이터가 압축되어 읽을 수 있음을 의미합니다.

그래서 간단히 말해서 columnstore-index가 단일 열의 B-tree보다 성능이 좋은가?

미리 감사드립니다.

답변

1

그래서 열 A의 색인을 만들 때 열 A 의 모든 필드가 테이블과 병행하여 디스크에 정렬 된 것처럼 보이지 않습니까?

예, 열 A가 정렬됩니다. 그러나 다른 모든 열은 그렇지 않습니다. 열 저장 인덱스는 모든 열을 정렬 된 순서로 저장합니다 (2^20 행의 청크).

+0

확인. 그러나 A 열의 항목을 선택하면 A의 모든 데이터가 정렬됩니다. 따라서 다른 열을 쿼리 할 때 columnstore-index가 더 효율적이라고 가정 할 수 있습니까? 하지만이 열에도 B- 트리를 넣기 만하면됩니까? – Gurdt

+0

데이터를 정렬해야하는 경우, B-Tree는 정렬 작업을 전혀 필요로하지 않습니다 (요청한 열이 색인의 접두사 인 경우). 열 저장소는 2^20 행당 저장된 열을 저장하기 때문에 정렬 된 열을 제공 할 수 없습니다. 이러한 세그먼트가 여러 개인 경우 정렬 순서를 제공 할 수 없습니다. – usr

+0

여기에 약간의 오해가있을 수 있습니다. Columnstore 인덱스의 목적은 관련 칼럼 만로드 될 수 있기 때문에 디스크에서 데이터를 읽는 데 소요되는 오버 헤드가 적다는 것입니다. 행 저장소에서로드 할 때 전체에서 행을 페치하므로 필요하지 않을 수도있는 열을로드합니다. 사례는 다음과 같습니다. 단순한 B- 트리 (비 클러스터형 인덱스)와는 달리, 하나의 열에 관심이 있다면, A로 말하면 컬럼 스토어 인덱스가 더 뛰어난 성능을 발휘할 수 있습니다. 실제로 클러스터되지 않은 인덱스의 리프는 필드, 필드 후 필드로 저장되며 가능하면 압축됩니다. – Gurdt