적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric의 SQL 데이터베이스
columnstore 인덱스 내 각 열 세그먼트에 대해 하나의 행을 반환합니다. 행 그룹당 열당 하나의 열 세그먼트가 있습니다. 예를 들어 10개의 행 그룹과 34개의 열이 있는 columnstore 인덱스에는 이 보기에 340개의 행이 있습니다.
| 열 이름 | 데이터 형식 | 설명 |
|---|---|---|
partition_id |
bigint | 파티션 ID를 나타냅니다. 데이터베이스 내에서 고유합니다. |
hobt_id |
bigint | 이 columnstore 인덱스가 있는 테이블의 힙 또는 B-트리 인덱스(HoBT)의 ID입니다. |
column_id |
int | columnstore 열의 ID입니다. |
segment_id |
int | 행 그룹의 ID입니다. 이전 버전과의 호환성을 위해 열 이름은 행 그룹 ID인 경우에도 segment_id 계속 호출됩니다. 를 사용하여 <hobt_id, partition_id, column_id, segment_id>세그먼트를 고유하게 식별할 수 있습니다. |
version |
int | 열 세그먼트 형식의 버전입니다. |
encoding_type |
int | 해당 세그먼트에 사용되는 인코딩 유형: 1 = VALUE_BASED - 사전이 없는 비 문자열/이진(일부 내부 변형이 있는 4와 유사) 2 = VALUE_HASH_BASED - 사전에서 공통 값이 있는 문자열이 아닌/이진 열 3 = STRING_HASH_BASED - 사전에서 공통 값이 있는 문자열/이진 열 4 = STORE_BY_VALUE_BASED - 사전이 없는 비 문자열/이진 5 = STRING_STORE_BY_VALUE_BASED - 사전이 없는 문자열/이진 자세한 내용은 설명 섹션을 참조하세요. |
row_count |
int | 행 그룹의 행 수입니다. |
has_nulls |
int | 열 세그먼트에 NULL이 있으면 1입니다. |
base_id |
bigint | 인코딩 형식 1을 사용하는 경우 기본 값 ID입니다. 인코딩 형식 1이 사용되지 base_id 않는 경우 -1로 설정됩니다. |
magnitude |
float | 인코딩 형식 1이 사용되는 경우 크기입니다. 인코딩 형식 1이 사용되지 magnitude 않는 경우 -1로 설정됩니다. |
primary_dictionary_id |
int | 값 0은 전역 사전을 나타냅니다. 값 -1은 이 열에 대해 만든 전역 사전이 없음을 나타냅니다. |
secondary_dictionary_id |
int | 0이 아닌 값은 현재 세그먼트(예: 행 그룹)에서 이 열의 로컬 사전을 가리킵니다. 값 -1은 이 세그먼트에 대한 로컬 사전이 없음을 나타냅니다. |
min_data_id |
bigint | 내부 전용입니다. |
max_data_id |
bigint | 내부 전용입니다. |
null_value |
bigint | null을 나타내는 데 사용되는 값입니다. |
on_disk_size |
bigint | 세그먼트 크기(바이트)입니다. |
collation_id |
int | 세그먼트를 만들 때의 현재 데이터 정렬입니다. 내부 ID에 매핑됩니다. 내부 전용입니다. 적용 대상: SQL Server 2022(16.x) 이상 버전, Azure SQL Database 및 Azure SQL Managed Instance |
min_deep_data |
varbinary(18) | 세그먼트 제거에 사용됩니다.1 내부용으로만 사용됩니다. 적용 대상: SQL Server 2022(16.x) 이상 버전, Azure SQL Database 및 Azure SQL Managed Instance |
max_deep_data |
varbinary(18) | 세그먼트 제거에 사용됩니다.1 내부용으로만 사용됩니다. 적용 대상: SQL Server 2022(16.x) 이상 버전, Azure SQL Database 및 Azure SQL Managed Instance |
1 확장된 데이터 형식 집합(SQL Server 2022(16.x)에서 도입됨)min_deep_datamax_deep_dataNULL 에 대해 최소/최대 세그먼트 제거를 지원하는 데이터베이스 엔진 버전으로 업그레이드한 후 columnstore 인덱스가 또는 ALTER INDEX ... REBUILD 문을 사용하여 CREATE INDEX ... WITH (DROP_EXISTING = ON) 다시 작성될 때까지 해당합니다.
설명
columnstore 세그먼트 인코딩 형식은 가장 낮은 스토리지 비용을 달성하기 위해 세그먼트 데이터를 분석하여 데이터베이스 엔진에서 선택합니다. 데이터가 대부분 고유한 경우 데이터베이스 엔진 값 기반 인코딩을 사용합니다. 데이터가 대부분 고유하지 않은 경우 데이터베이스 엔진 해시 기반 인코딩을 사용합니다. 문자열 기반 인코딩과 값 기반 인코딩 중에서 선택하는 것은 문자열 데이터 또는 이진 데이터와 관계없이 저장되는 데이터 형식과 관련이 있습니다. 가능한 경우 모든 인코딩은 비트 압축 및 실행 길이 인코딩을 활용합니다.
Columnstore 세그먼트 제거는 숫자, 날짜 및 시간 데이터 형식 및 크기가 2보다 작거나 같은 datetimeoffset 데이터 형식에 적용됩니다. SQL Server 2022(16.x)부터 세그먼트 제거 기능은 문자열 및 이진 데이터 형식, uniqueidentifier 데이터 형식 및 2보다 큰 배율에 대한 datetimeoffset 데이터 형식으로 확장됩니다. 세그먼트 제거는 varchar(max), nvarchar(max) 및 varbinary(max)와 같은 LOB 데이터 형식에는 적용되지 않습니다. 더 많은 정보를 보려면 columnstore 인덱스의 새로운 기능을 참조하십시오.
사용 권한
VIEW DEFINITION 보기에 대한 권한이 필요합니다. 사용자에게 NULL 권한이 SELECThas_nullsbase_idmagnitudemin_data_idmax_data_id없는 경우 다음 열이 반환 null_value 됩니다.
사용자가 소유하고 있거나 사용 권한을 부여 받은 보안 개체에 대해서만 카탈로그 뷰의 메타데이터를 볼 수 있습니다. 자세한 내용은 Metadata Visibility Configuration을 참조하세요.
예제
다음 쿼리는 columnstore 인덱스의 세그먼트에 대한 정보를 반환합니다.
SELECT i.name, p.object_id, p.index_id, i.type_desc,
COUNT(*) AS number_of_segments
FROM sys.column_store_segments AS s
INNER JOIN sys.partitions AS p
ON s.hobt_id = p.hobt_id
INNER JOIN sys.indexes AS i
ON p.object_id = i.object_id
WHERE i.type = 5 OR i.type = 6
GROUP BY i.name, p.object_id, p.index_id, i.type_desc;