CREATE COLUMNSTORE INDEX(Transact-SQL)
지정된 테이블에 columnstore 인덱스를 만듭니다. xVelocity 메모리 최적화 columnstore 인덱스는 일종의 압축된 비클러스터형 인덱스입니다. 테이블당 하나의 columnstore 인덱스만 만들 수 있습니다. 인덱스는 테이블에 데이터를 넣기 전에 만들 수 있습니다. columnstore 인덱스가 포함된 테이블은 업데이트할 수 없습니다. columnstore 인덱스를 사용하는 방법은 columnstore 인덱스를 참조하십시오.
[!참고]
관계형 인덱스를 만드는 방법에 대한 자세한 내용은 CREATE INDEX(Transact-SQL)를 참조하십시오. XML 인덱스를 만드는 방법에 대한 자세한 내용은 CREATE XML INDEX(Transact-SQL)를 참조하십시오. 공간 인덱스를 만드는 방법에 대한 자세한 내용은 CREATE SPATIAL INDEX(Transact-SQL)를 참조하십시오.
구문
CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name
ON <object> ( column [ ,...n ] )
[ WITH ( <column_index_option> [ ,...n ] ) ]
[ ON {
{ partition_scheme_name ( column_name ) }
| filegroup_name
| "default"
}
]
[ ; ]
<object> ::=
{
[database_name. [schema_name ] . | schema_name . ]
table_name
{
<column_index_option> ::=
{
DROP_EXISTING = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
}
인수
NONCLUSTERED
테이블의 논리적 순서를 지정하는 columnstore 인덱스를 만듭니다. 클러스터형 columnstore 인덱스는 지원되지 않습니다.COLUMNSTORE
인덱스가 columnstore 인덱스임을 나타냅니다.index_name
인덱스의 이름입니다. 인덱스 이름은 테이블이나 뷰에서 고유해야 하지만 데이터베이스 내에서 고유할 필요는 없습니다. 인덱스 이름은 식별자 규칙을 따라야 합니다.column
인덱스의 기준이 되는 열입니다. 최대 1,024개의 열에 대해서만 columnstore 인덱스를 만들 수 있습니다.ON partition_scheme_name**(column_name)**
분할된 인덱스의 파티션이 매핑될 파일 그룹을 정의하는 파티션 구성표를 지정합니다. 파티션 구성표는 CREATE PARTITION SCHEME을 실행하여 데이터베이스 내에 포함해야 합니다. column_name은 분할된 인덱스가 분할될 경우 기준으로 사용할 열을 지정합니다. 이 열은 partition_scheme_name에서 사용하는 파티션 함수의 데이터 형식, 길이 및 전체 자릿수가 일치해야 합니다. column_name은 인덱스 정의의 열만 사용할 필요는 없으며 columnstore 인덱스를 분할하는 경우 데이터베이스 엔진에서는 인덱스의 열이 아직 지정되지 않은 경우 분할 열을 인덱스의 열로 추가합니다.partition_scheme_name 또는 filegroup이 지정되지 않고 테이블이 분할된 경우 인덱스는 동일한 분할 열을 사용하여 동일한 파티션 구성표에 기본 테이블로 배치됩니다.
인덱스를 분할하는 방법은 분할된 테이블 및 인덱스을 참조하십시오.
ON filegroup_name
주어진 파일 그룹에 지정된 인덱스를 만듭니다. 지정된 위치가 없고 테이블 또는 뷰가 분할되지 않은 경우 인덱스는 동일한 파일 그룹을 기본 테이블 또는 뷰로 사용합니다. 파일 그룹은 이미 존재해야 합니다.ON "default"
기본 파일 그룹에 지정된 인덱스를 만듭니다.이 컨텍스트에서 default는 키워드가 아닙니다. 이것은 기본 파일 그룹에 대한 식별자이며 ON "default" 또는 ON **[default]**와 같이 구분되어야 합니다. "default"를 지정하면 현재 세션의 QUOTED_IDENTIFIER 옵션이 ON이어야 합니다. 이 값은 기본 설정입니다. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하십시오.
<object>::=
인덱스할 정규화되거나 정규화되지 않은 개체입니다.
database_name
데이터베이스의 이름입니다.schema_name
테이블이 속한 스키마의 이름입니다.table_name
인덱싱할 테이블 이름입니다.
<column_index_option>::=
columnstore 인덱스를 만들 때 사용할 옵션을 지정합니다.
DROP_EXISTING
명명된 기존 인덱스를 삭제하고 다시 작성하도록 지정합니다. 기본값은 OFF입니다.- ON
기존 인덱스가 삭제되고 다시 작성됩니다. 지정된 인덱스 이름은 현재 존재하는 인덱스 이름과 같아야 합니다. 그러나 인덱스 정의는 수정할 수 있습니다. 예를 들어 다른 열 또는 인덱스 옵션을 지정할 수 있습니다.
- OFF
지정된 인덱스 이름이 이미 존재하는 경우 오류가 표시됩니다. 인덱스 유형은 DROP_EXISTING을 사용하여 변경할 수 없습니다. 이전 버전과 호환되는 구문에서 WITH DROP_EXISTING은 WITH DROP_EXISTING = ON과 같습니다.
- ON
MAXDOP = max_degree_of_parallelism
인덱스 작업 중에 max degree of parallelism 서버 구성 옵션 구성 구성 옵션을 재정의합니다. MAXDOP를 사용하여 병렬 계획 실행에 사용되는 프로세서 수를 제한할 수 있습니다. 최대값은 64개입니다.max_degree_of_parallelism은 다음 값이 될 수 있습니다.
1
병렬 계획이 생성되지 않습니다.>1
병렬 인덱스 작업에 사용되는 최대 프로세서 수를 현재 시스템 작업에 따라 지정된 수 또는 더 적은 수로 제한합니다.0(기본값)
현재 시스템 작업에 따라 실제 프로세서 수 이하의 프로세서를 사용합니다.
자세한 내용은 병렬 인덱스 작업 구성을 참조하십시오.
[!참고]
병렬 인덱스 작업은 일부 Microsoft SQL Server 버전에서 사용할 수 있습니다. SQL Server 버전에서 지원하는 기능 목록을 보려면 SQL Server 2012 버전에서 지원하는 기능을 참조하십시오.
주의
임시 테이블에 인덱스를 만들 수 있습니다. 테이블이 삭제되거나 세션이 종료되면 인덱스가 삭제됩니다.
일반적인 비즈니스 데이터 형식을 columnstore 인덱스에 포함할 수 있습니다. columnstore 인덱스에 포함할 수 있는 데이터 형식은 다음과 같습니다.
char 및 varchar
nchar 및 nvarchar(varchar(max) 및 nvarchar(max) 제외)
decimal 및 numeric(전체 자릿수가 18자리를 초과하는 경우 제외)
int, bigint, smallint 및 tinyint
float 및 real
bit
money 및 smallmoney
모든 날짜 및 시간 데이터 형식(소수 자릿수가 2자리를 초과하는 datetimeoffset 제외)
다음 데이터 형식은 columnstore 인덱스에 포함할 수 없습니다.
binary 및 varbinary
ntext, text 및 image
varchar(max) 및 nvarchar(max)
uniqueidentifier
rowversion 및 timestamp
sql_variant
전체 자릿수가 18자리를 초과하는 decimal 및 numeric
소수 자릿수가 2자리를 초과하는 datetimeoffset
CLR 유형(hierarchyid 및 공간 형식)
xml
기본 제한 사항
columnstore 인덱스
최대 1,024개의 열만 사용할 수 있습니다.
클러스터형일 수 없습니다. 비클러스터형 columnstore 인덱스만 사용할 수 있습니다.
고유 인덱스일 수 없습니다.
뷰 또는 인덱싱된 뷰에서는 만들 수 없습니다.
스파스 열을 포함할 수 없습니다.
기본 키 또는 외래 키로 사용할 수 없습니다.
ALTER INDEX 문을 사용하여 변경할 수 없습니다. 대신 columnstore 인덱스를 삭제하고 다시 만듭니다. ALTER INDEX를 사용하여 columnstore 인덱스를 해제하고 다시 만들 수 있습니다.
INCLUDE 키워드로 만들 수 없습니다.
인덱스를 정렬하기 위해 ASC 또는 DESC 키워드를 포함할 수 없습니다. columnstore 인덱스는 압축 알고리즘에 따라 정렬됩니다. 정렬을 사용하면 성능상의 많은 이점이 없어집니다.
columnstore 인덱스는 다음 기능과 함께 사용할 수 없습니다.
페이지 및 행 압축과 vardecimal 저장소 형식(columnstore 인덱스가 이미 다른 형식으로 압축되어 있음)
복제
변경 내용 추적
변경 데이터 캡처
Filestream
columnstore 인덱스의 성능상 이점 및 제한 사항에 대한 자세한 내용은 columnstore 인덱스를 참조하십시오.
사용 권한
테이블에 대한 ALTER 권한이 필요합니다.
예
1.단순 비클러스터형 인덱스 만들기
다음 예에서는 간단한 테이블 및 클러스터형 인덱스를 만든 다음 columnstore 인덱스를 만드는 구문을 보여 줍니다.
CREATE TABLE SimpleTable
(ProductKey [int] NOT NULL,
OrderDateKey [int] NOT NULL,
DueDateKey [int] NOT NULL,
ShipDateKey [int] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON SimpleTable (ProductKey);
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable
(OrderDateKey, DueDateKey, ShipDateKey);
GO
2.모든 옵션을 사용하여 단순 비클러스터형 인덱스 만들기
다음 예에서는 간단한 테이블 및 클러스터형 인덱스를 만든 다음 columnstore 인덱스를 만드는 구문을 보여 줍니다.
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable
(OrderDateKey, DueDateKey, ShipDateKey)
WITH (DROP_EXISTING = ON,
MAXDOP = 2)
ON "default"
GO
분할된 테이블을 사용하는 전체 예를 보려면 columnstore 인덱스를 참조하십시오.
참고 항목
참조
sys.column_store_dictionaries(Transact-SQL)
sys.column_store_segments(Transact-SQL)
CREATE PARTITION FUNCTION(Transact-SQL)
CREATE PARTITION SCHEME(Transact-SQL)
sys.index_columns(Transact SQL)