선택적 XML 인덱스(SXI)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

선택적 XML 인덱스는 일반 XML 인덱스 외에도 사용할 수 있는 또 다른 유형의 XML 인덱스입니다. 선택적 XML 인덱스 기능의 목표는 다음과 같습니다.

  • SQL Server에 저장된 XML 데이터에 대한 쿼리 성능을 향상시킵니다.

  • 대규모 XML 데이터 워크로드의 빠른 인덱싱을 지원합니다.

  • XML 인덱스의 스토리지 비용을 줄여 확장성을 향상시킵니다.

일반 XML 인덱스의 주요 제한 사항은 일반 인덱스는 전체 XML 문서를 인덱싱한다는 것입니다. 이로 인해 쿼리 성능 저하 및 주로 인덱스의 스토리지 비용과 관련된 인덱스의 유지 관리 비용 증가와 같은 몇 가지 중요한 단점이 생겨났습니다.

선택적 XML 인덱스 기능을 사용하면 특정 경로만 XML 문서에서 인덱스로 승격시킬 수 있습니다. 인덱스를 만들 때 이러한 경로가 평가되고 해당 경로가 가리키는 노드가 조각화되어 SQL Server의 관계형 테이블 내에 저장됩니다. 이 기능은 MICROSOFT Research에서 SQL Server 제품 팀과 공동으로 개발한 효율적인 매핑 알고리즘을 사용합니다. 이 알고리즘은 XML 노드를 단일 관계형 테이블에 매핑하고, 적당한 스토리지 공간만 요구하면서 뛰어난 성능을 달성합니다.

선택적 XML 인덱스 기능은 선택적 XML 인덱스에 의해 인덱싱된 노드에 대한 보조 선택적 XML 인덱스도 지원합니다. 이러한 보조 선택적 인덱스는 효율적이며 쿼리 성능을 더욱 향상시킵니다.

선택적 XML 인덱스의 이점

선택적 XML 인덱스는 다음과 같은 이점을 제공합니다.

  1. 일반적인 쿼리 로드에 대한 XML 데이터 형식에 대한 쿼리 성능이 크게 향상되었습니다.

  2. 일반 XML 인덱스에 비해 스토리지 요구 사항이 감소했습니다.

  3. 일반 XML 인덱스에 비해 인덱스 유지 관리 비용이 줄어듭니다.

  4. 선택적 XML 인덱스의 이점을 활용하기 위해 애플리케이션을 업데이트할 필요가 없습니다.

선택적 XML 인덱스 및 기본 XML 인덱스

Important

대부분의 경우 더 나은 성능과 더 효율적인 스토리지를 위해 일반 XML 인덱스 대신 선택적 XML 인덱스를 만듭니다.

그러나 다음 조건 중 하나가 true인 경우 선택적 XML 인덱스는 권장되지 않습니다.

  • 많은 수의 노드 경로를 매핑하는 경우

  • 문서 구조의 알 수 없는 위치에 있는 알 수 없는 요소 또는 요소에 대한 쿼리를 지원합니다.

선택적 XML 인덱스의 예

다음 XML 조각을 약 500,000개의 행 테이블에서 XML 문서로 간주합니다.

<book>
    <created>2004-03-01</created>
    <authors>Various</authors>
    <subjects>
        <subject>English wit and humor -- Periodicals</subject>
        <subject>AP</subject>
    </subjects>
    <title>Punch, or the London Charivari, Volume 156, April 2, 1919</title>
    <id>etext11617</id>
</book>

이 간단한 스키마의 여러 행에 대해 기본 XML 인덱스를 만드는 데 시간이 오래 걸립니다. 이 데이터를 쿼리하는 경우 기본 XML 인덱스가 선택적 인덱싱을 지원하지 않는다는 사실도 있습니다.

경로와 /book/subjects 경로를 통해 /book/title 서만 이 데이터를 쿼리해야 하는 경우 다음 선택적 XML 인덱스만 만들 수 있습니다.

CREATE SELECTIVE XML INDEX SXI_index
ON Tbl(xmlcol)
FOR
(
    pathTitle = '/book/title/text()' AS XQUERY 'xs:string',
    pathAuthors = '/book/authors' AS XQUERY 'node()',
    pathId = '/book/id' AS SQL NVARCHAR(100)
);

앞의 문은 선택적 XML 인덱스를 만들 때 사용하는 CREATE 구문의 좋은 예입니다. CREATE 문에서 먼저 인덱스 수를 제공하고 인덱싱할 테이블 및 XML 열을 식별한 다음 그런 다음 인덱스에 대한 경로를 제공합니다. 경로는 다음 세 부분으로 구성합니다.

  1. 경로를 고유하게 식별하는 이름입니다.

  2. 경로를 설명하는 XQuery 식입니다.

  3. 선택적 최적화 힌트입니다.

이러한 요소에 대한 자세한 내용은 관련 태스크를 참조하십시오.

지원되는 기능, 필수 구성 요소 및 제한 사항

지원되는 XML 기능

선택적 XML 인덱스는 , 및 nodes() 메서드 내에서 SQL Server에서 지원하는 XQuery를 exist()value()지원합니다.

  • value()nodes() 메서드의 exist()경우 선택적 XML 인덱스에는 전체 식을 변환할 수 있는 충분한 정보가 포함되어 있습니다.

  • modify() 메서드의 query() 경우 선택적 XML 인덱스를 노드 필터링에만 사용할 수 있습니다.

  • 메서드의 query() 경우 선택적 XML 인덱스는 결과를 검색하는 데 사용되지 않습니다.

  • 이 메서드의 modify() 경우 선택적 XML 인덱스는 XML 문서를 업데이트하는 데 사용되지 않습니다.

지원되지 않는 XML 기능

선택적 XML 인덱스는 XML의 SQL Server 구현에서 지원되는 다음 기능을 지원하지 않습니다.

  • 복합 XS 형식을 사용하는 노드의 인덱싱: 공용 구조체 형식, 시퀀스 형식 및 목록 형식입니다.

  • 이진 XS 형식을 사용하는 노드의 인덱싱(예: base64Binary 및 hexBinary).

  • 끝에 와일드카드 문자 * 가 포함된 XPath 식을 사용하여 인덱싱할 노드 지정(예/a/b/c/*: 예/a//b/*/a/b/*:c:

  • 자식, 특성 또는 하위 항목 이외의 축 인덱싱 이 //<step> 케이스는 특별한 경우로 허용됩니다.

  • XML 처리 지침 및 주석의 인덱싱

  • id() 함수를 사용하여 노드의 식별자를 지정하고 검색합니다.

전제 조건

사용자 테이블의 XML 열에 대해 선택적 XML 인덱스를 만들려면 다음 필수 구성 요소가 있어야 합니다.

  • 클러스터형 인덱스는 사용자 테이블의 기본 키에 있어야 합니다.

  • 사용자 테이블의 기본 키는 선택적 XML 인덱스와 함께 사용할 때 128바이트 크기로 제한됩니다.

  • 사용자 테이블의 클러스터링 키는 선택적 XML 인덱스와 함께 사용할 경우 15열로 제한됩니다.

제한 사항

일반 요구 사항 및 제한 사항

  • 각 선택적 XML 인덱스만 단일 XML 열에 만들 수 있습니다.
  • 비 XML 열에는 선택적 XML 인덱스 만들 수 없습니다.
  • 테이블의 각 XML 열에는 선택적 XML 인덱스가 하나만 있을 수 있습니다.
  • 각 테이블에는 최대 249개의 선택적 XML 인덱스가 있을 수 있습니다.

지원되는 개체에 대한 제한 사항

다음 개체에는 선택적 XML 인덱스를 만들 수 없습니다.

  • 보기의 XML 열
  • XML 열이 있는 테이블 반환 변수
  • XML 형식 변수
  • 계산된 XML 열
  • 중첩된 노드의 깊이가 128개 이상인 XML 열입니다.

스토리지 제한 사항

인덱스에 추가할 수 있는 XML 문서의 노드 수에는 한정된 제한이 있습니다. 선택적 XML 인덱스가 XML 문서를 단일 관계형 테이블에 매핑합니다. 따라서 테이블의 지정된 행에 Null이 아닌 열이 1024개 이상 있을 수 없습니다. 또한 인덱스는 스토리지에 스파스 열을 사용하기 때문에 스파스 열의 많은 제한 사항이 선택적 XML 인덱스에도 적용됩니다.

지정된 행에서 지원되는 null이 아닌 열의 최대 수는 열의 데이터 크기에 따라 달라집니다.

  • 가장 좋은 경우 모든 열이 비트 형식인 경우 null이 아닌 열 1024개가 지원됩니다.

  • 최악의 경우 모든 열이 varchar 형식의 큰 개체인 경우 236개의 null이 아닌 열만 지원됩니다.

선택적 XML 인덱스는 인덱싱된 모든 노드 경로에 대해 내부적으로 1~4개의 열을 사용합니다. 인덱싱할 수 있는 총 노드 수는 인덱싱된 경로에 있는 데이터의 실제 크기에 따라 60개에서 수백 개의 노드까지 다양합니다.

  • 최악의 경우 노드 경로 정의에서 일부 또는 모든 노드가 매핑 // 되는 경우 인덱싱된 노드의 최대 수는 60개입니다.

  • 가장 좋은 경우 노드 경로 정의에서 사용하지 // 않고 노드를 매핑하는 경우 인덱싱된 노드의 최대 수는 200개입니다.

인덱스를 만들거나 변경하면 선택적 XML 인덱스가 다시 작성됩니다.

선택적 XML 인덱스를 만들거나 변경하면 해당 인덱스는 단일 스레드 오프라인 모드에서 다시 작성됩니다. 자주 ALTER 문은 인덱싱된 XML 문서에 대한 쿼리 성능에 부정적인 영향을 줍니다.

기타 제한 사항

  • 선택적 XML 인덱스는 쿼리 힌트에서 지원되지 않습니다.

  • 데이터베이스 튜닝 관리자에서는 선택적 XML 인덱스 및 보조 선택적 XML 인덱스가 지원되지 않습니다.

참고 항목