CREATE XML INDEX(Transact-SQL)
지정된 테이블에 XML 인덱스를 만듭니다. 인덱스는 테이블에 데이터를 넣기 전에 만들 수 있습니다. 정규화된 데이터베이스 이름을 지정하여 다른 데이터베이스에 있는 테이블에 XML 인덱스를 만들 수도 있습니다.
[!참고]
관계형 인덱스를 만들려면 CREATE INDEX(Transact-SQL)를 참조하십시오. 공간 인덱스를 만드는 방법은 CREATE SPATIAL INDEX(Transact-SQL)를 참조하십시오.
구문
Create XML Index
CREATE [ PRIMARY ] XML INDEX index_name
ON <object> (xml_column_name )
[ USING XML INDEX xml_index_name
[ FOR { VALUE | PATH | PROPERTY } ] ]
[ WITH ( <xml_index_option> [ ,...n ] ) ]
[ ; ]
<object> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
table_name
}
<xml_index_option> ::=
{
PAD_INDEX = { ON | OFF }
| FILLFACTOR = fillfactor
| SORT_IN_TEMPDB = { ON | OFF }
| IGNORE_DUP_KEY =OFF
| DROP_EXISTING = { ON | OFF }
| ONLINE =OFF
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
| MAXDOP =max_degree_of_parallelism
}
인수
[PRIMARY] XML
지정된 xml 열에 XML 인덱스를 만듭니다. PRIMARY를 지정한 경우 사용자 테이블의 클러스터링 키 및 XML 노드 식별자로 구성된 클러스터형 키를 사용하여 클러스터형 인덱스가 만들어집니다. 각 테이블에는 최대 249개의 XML 인덱스가 있을 수 있습니다. XML 인덱스를 만들 때는 다음 사항을 알아야 합니다.클러스터형 인덱스는 사용자 테이블의 기본 키에 있어야 합니다.
사용자 테이블의 클러스터링 키는 15개의 열로 제한됩니다.
테이블의 각 xml 열에는 하나의 기본 XML 인덱스 및 여러 개의 보조 XML 인덱스가 있을 수 있습니다.
xml 열에 기본 XML 인덱스가 있어야 이 열에 보조 XML 인덱스를 만들 수 있습니다.
XML 인덱스는 단일 xml 열에만 만들 수 있습니다. xml이 아닌 열에 XML 인덱스를 만들 수 없으며 xml 열에 관계형 인덱스를 만들 수 없습니다.
뷰의 xml 열, xml 열이 있는 테이블 반환 변수 또는 xml 유형 변수에 기본 XML 인덱스 또는 보조 XML 인덱스를 만들 수 없습니다.
계산 xml 열에 기본 XML 인덱스를 만들 수 없습니다.
SET 옵션 설정은 인덱싱된 뷰 및 계산 열 인덱스에 필요한 설정과 같아야 합니다. 특히 XML 인덱스를 만들 때와 xml 열에서 값을 삽입, 삭제 또는 업데이트할 때 ARITHABORT 옵션은 ON으로 설정되어 있어야 합니다. 자세한 내용은 결과에 영향을 주는 SET 옵션을 참조하십시오.
자세한 내용은 XML 데이터 형식 열의 인덱스를 참조하십시오.
index_name
인덱스의 이름입니다. 인덱스 이름은 테이블에서 고유해야 하지만 데이터베이스 내에서 고유할 필요는 없습니다. 인덱스 이름은 식별자 규칙을 따라야 합니다.기본 XML 인덱스 이름은 #, ##, @ 또는 @@ 문자로 시작할 수 없습니다.
xml_column_name
인덱스의 기반이 되는 xml 열입니다. 단일 XML 인덱스 정의에서는 하나의 xml 열만 지정할 수 있지만 xml 열에서는 여러 개의 보조 XML 인덱스를 만들 수 있습니다.USING XML INDEX xml_index_name
보조 XML 인덱스를 만들 때 사용할 기본 XML 인덱스를 지정합니다.FOR { VALUE | PATH | PROPERTY }
보조 XML 인덱스의 유형을 지정합니다.VALUE
키 열이 기본 XML 인덱스의 노드 값 및 경로인 열에 보조 XML 인덱스를 만듭니다.PATH
기본 XML 인덱스의 경로 값 및 노드 값에 작성된 열에 보조 XML 인덱스를 만듭니다. PATH 보조 인덱스에서 경로 값 및 노드 값은 경로 검색 시 효율적으로 검색할 수 있는 키 열입니다.PROPERTY
PK가 기본 테이블의 기본 키인 기본 XML 인덱스의 열(PK, 경로 및 노드 값)에 보조 XML 인덱스를 만듭니다.
<object>::=
인덱싱할 정규화되거나 정규화되지 않은 개체입니다.
database_name
데이터베이스의 이름입니다.schema_name
테이블이 속한 스키마의 이름입니다.table_name
인덱싱할 테이블 이름입니다.
<xml_index_option> ::=
인덱스를 만들 때 사용할 옵션을 지정합니다.
PAD_INDEX = { ON | OFF }
인덱스 패딩을 지정합니다. 기본값은 OFF입니다.ON
fillfactor로 지정된 사용 가능한 공간의 비율이 인덱스의 중간 수준 페이지에 적용됩니다.OFF 또는 fillfactor가 지정되지 않았습니다.
중간 수준 페이지는 중간 페이지의 키 집합을 고려하며 인덱스가 가질 수 있는 최대 크기의 한 행에 필요한 공간을 충분히 남기고 용량을 거의 채웁니다.
PAD_INDEX는 FILLFACTOR에 지정된 비율을 사용하므로 FILLFACTOR가 지정된 경우에만 PAD_INDEX 옵션을 사용할 수 있습니다. FILLFACTOR에 지정된 비율이 한 행을 저장하기에도 부족하면 데이터베이스 엔진은 내부적으로 허용된 최소 비율을 무시합니다. fillfactor 값이 아무리 작더라도 중간 인덱스 페이지의 행 수는 두 개 이상입니다.
FILLFACTOR **=**fillfactor
인덱스를 만들거나 다시 작성할 때 데이터베이스 엔진이 각 인덱스 페이지의 리프 수준을 채우는 비율을 지정합니다. fillfactor는 1에서 100 사이의 정수 값이어야 하며 기본값은 0입니다. fillfactor가 100 또는 0이면 데이터베이스 엔진은 리프 페이지가 꽉 찬 인덱스를 만듭니다.[!참고]
채우기 비율 값 0과 100은 모든 면에서 동일합니다.
FILLFACTOR 설정은 인덱스를 만들거나 다시 작성하는 경우에만 적용됩니다. 데이터베이스 엔진에서는 페이지에 지정된 비율의 빈 공간을 동적으로 유지하지 않습니다. 채우기 비율 설정을 보려면 sys.indexes 카탈로그 뷰를 사용하십시오.
중요 데이터베이스 엔진은 클러스터형 인덱스를 만들 때 데이터를 다시 배포하므로 FILLFACTOR가 100 미만인 클러스터형 인덱스를 만들면 데이터가 차지하는 저장 공간 크기에 영향을 줍니다.
자세한 내용은 채우기 비율을 참조하십시오.
SORT_IN_TEMPDB = { ON | OFF }
tempdb에 임시 정렬 결과를 저장할지 여부를 지정합니다. 기본값은 OFF입니다.ON
인덱스 작성에 사용되는 중간 정렬 결과는 tempdb에 저장됩니다. 이 경우 사용자 데이터베이스가 아닌 다른 디스크 세트에 tempdb가 있으면 인덱스 생성에 필요한 시간이 단축될 수 있습니다. 그러나 인덱스 작성 중에 사용되는 디스크 공간의 크기는 커집니다.OFF
중간 정렬 결과가 인덱스와 같은 데이터베이스에 저장됩니다.
사용자 데이터베이스에서 인덱스를 만드는 데 필요한 공간 외에 tempdb에는 중간 정렬 결과를 저장할 정도의 동일한 공간이 추가로 필요합니다. 자세한 내용은 tempdb 및 인덱스 만들기를 참조하십시오.
IGNORE_DUP_KEY **=**OFF
인덱스 유형은 고유할 수 없으므로 XML 인덱스에 영향을 미치지 않습니다. 이 옵션을 ON으로 설정하지 마십시오. ON으로 설정하면 오류가 발생합니다.DROP_EXISTING = { ON | OFF }
명명된 기존 XML 인덱스를 삭제하고 다시 작성하도록 지정합니다. 기본값은 OFF입니다.ON
기존 인덱스가 삭제되고 다시 작성됩니다. 지정된 인덱스 이름은 현재 존재하는 인덱스 이름과 같아야 합니다. 그러나 인덱스 정의는 수정할 수 있습니다. 예를 들어 다른 열, 정렬 순서, 파티션 구성표 또는 인덱스 옵션을 지정할 수 있습니다.OFF
지정된 인덱스 이름이 이미 존재하는 경우 오류가 표시됩니다.
인덱스 유형은 DROP_EXISTING을 사용하여 변경할 수 없습니다. 또한 기본 XML 인덱스는 보조 XML 인덱스로 다시 정의할 수 없으며 반대인 경우도 마찬가지입니다.
ONLINE **=**OFF
인덱스 작업 중에 쿼리 및 데이터 수정에 기본 테이블 및 관련 인덱스를 사용할 수 없도록 지정합니다. 이 SQL Server 버전에서는 XML 인덱스에 대해 온라인 인덱스 작성이 지원되지 않습니다. 이 옵션이 XML 인덱스에 대해 ON으로 설정되어 있으면 오류가 발생합니다. ONLINE 옵션을 생략하거나 ONLINE을 OFF로 설정하십시오.XML 인덱스를 작성, 다시 작성 또는 삭제하는 오프라인 인덱스 작업은 테이블에 대해 SCH-M(스키마 수정) 잠금을 획득합니다. 이 경우 작업 중에 모든 사용자가 기본 테이블에 액세스할 수 없게 됩니다.
[!참고]
온라인 인덱스 작업은 SQL Server Enterprise, Developer 및 Evaluation Edition에서만 사용할 수 있습니다.
ALLOW_ROW_LOCKS = { ON | OFF }
행 잠금의 허용 여부를 지정합니다. 기본값은 ON입니다.ON
인덱스에 액세스할 때 행 잠금이 허용됩니다. 행 잠금을 사용하는 시점은 데이터베이스 엔진이 결정합니다.OFF
행 잠금이 사용되지 않습니다.
ALLOW_PAGE_LOCKS = { ON | OFF }
페이지 잠금의 허용 여부를 지정합니다. 기본값은 ON입니다.ON
인덱스에 액세스할 때 페이지 잠금이 허용됩니다. 페이지 잠금을 사용하는 시점은 데이터베이스 엔진이 결정합니다.OFF
페이지 잠금이 사용되지 않습니다.
MAXDOP **=**max_degree_of_parallelism
인덱스 작업 기간 동안 max degree of parallelism 구성 옵션을 재정의합니다. MAXDOP를 사용하여 병렬 계획 실행에 사용되는 프로세서 수를 제한할 수 있습니다. 최대값은 64개입니다.중요 MAXDOP 옵션은 모든 XML 인덱스에 대해 구문으로는 지원되지만 기본 XML 인덱스의 경우 CREATE XML INDEX는 단일 프로세서만 사용합니다.
max_degree_of_parallelism은 다음 값이 될 수 있습니다.
1
병렬 계획이 생성되지 않습니다.>1
병렬 인덱스 작업에 사용되는 최대 프로세서 수를 현재 시스템 작업에 따라 지정된 수 또는 더 적은 수로 제한합니다.0(기본값)
현재 시스템 작업에 따라 실제 프로세서 수 이하의 프로세서를 사용합니다.
자세한 내용은 병렬 인덱스 작업 구성을 참조하십시오.
[!참고]
병렬 인덱스 작업은 SQL Server Enterprise, Developer 및 Evaluation Edition에서만 사용할 수 있습니다.
주의
xml 데이터 형식에서 파생된 계산 열은 계산 열 데이터 형식이 인덱스 키 열 또는 키가 아닌 열에 허용되는 경우에 한해 키 또는 키가 아닌 포괄 열로 인덱싱될 수 있습니다. 계산 xml 열에 기본 XML 인덱스를 만들 수 없습니다.
XML 인덱스에 대한 정보를 보려면 sys.xml_indexes 카탈로그 뷰를 사용합니다.
XML 인덱스에 대한 자세한 내용은 XML 데이터 형식 열의 인덱스를 참조하십시오.
인덱스 작성에 대한 추가 주의 사항
인덱스 작성에 대한 자세한 내용은 CREATE INDEX(Transact-SQL)에서 "주의" 섹션을 참조하십시오.
예
1. 기본 XML 인덱스 만들기
다음 예에서는 Production.ProductModel 테이블의 CatalogDescription 열에 기본 XML 인덱스를 만듭니다.
USE AdventureWorks;
GO
IF EXISTS (SELECT * FROM sys.indexes
WHERE name = N'PXML_ProductModel_CatalogDescription')
DROP INDEX PXML_ProductModel_CatalogDescription
ON Production.ProductModel;
GO
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
ON Production.ProductModel (CatalogDescription);
GO
2. 보조 XML 인덱스 만들기
다음 예에서는 Production.ProductModel 테이블의 CatalogDescription 열에 보조 XML 인덱스를 만듭니다.
USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'IXML_ProductModel_CatalogDescription_Path')
DROP INDEX IXML_ProductModel_CatalogDescription_Path
ON Production.ProductModel;
GO
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path
ON Production.ProductModel (CatalogDescription)
USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH ;
GO
참고 항목