다음을 통해 공유


XML 데이터 형식 열의 인덱스

XML 인덱스를 xml 데이터 형식의 열에 만들 수 있습니다. 그러면 열에 있는 XML 인스턴스에 대해 모든 태그, 값 및 경로가 인덱싱되어 쿼리 성능이 향상됩니다. 다음 경우에 응용 프로그램에서 XML 인덱스를 활용할 수 있습니다.

  • XML 열의 쿼리가 작업에서 일반적입니다. 데이터를 수정하는 동안 XML 인덱스 유지 관리 비용이 고려되어야 합니다.

  • XML 값이 비교적 크며 검색된 부분은 비교적 작습니다. 인덱스를 작성하면 런타임 시 전체 데이터의 구문 분석이 방지되므로 인덱스 조회를 통해 쿼리를 효율적으로 처리할 수 있습니다.

XML 인덱스는 다음 범주로 구분됩니다.

  • 기본 XML 인덱스

  • 보조 XML 인덱스

xml 형식 열의 첫 번째 인덱스는 기본 XML 인덱스여야 합니다. 기본 XML 인덱스를 사용하면 PATH, VALUE 및 PROPERTY 형식의 보조 인덱스가 지원됩니다. 이러한 보조 인덱스는 쿼리 유형에 따라 쿼리 성능을 향상시킬 수 있습니다.

[!참고]

데이터베이스 옵션이 xml 데이터 형식 작업에 대해 제대로 설정되지 않을 경우 XML 인덱스를 만들거나 수정할 수 없습니다. 자세한 내용은 XML 열의 전체 텍스트 인덱스를 참조하십시오.

XML 인스턴스는 BLOB(Binary Large Object)으로 xml 형식 열에 저장되어 있습니다. 이러한 XML 인스턴스는 크기가 클 수 있으며 xml 데이터 형식 인스턴스의 저장된 이진 표현은 최대 2GB까지 될 수 있습니다. 이러한 BLOB은 인덱스 없이 런타임 시 단편화되어 쿼리를 계산할 수 있습니다. 이 단편화 작업에는 시간이 많이 걸릴 수 있습니다. 예를 들어 다음 쿼리를 참조하십시오.

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS "PD")

SELECT CatalogDescription.query('
  /PD:ProductDescription/PD:Summary
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.exist ('/PD:ProductDescription/@ProductModelID[.="19"]') = 1

WHERE 절의 조건에 맞는 XML 인스턴스를 선택할 수 있도록 Production.ProductModel 테이블의 각 행에서 XML BLOB이 런타임 시 단편화됩니다. 그런 다음 exist() 메서드의 (/PD:ProductDescription/@ProductModelID[.="19"]) 식이 계산됩니다. 이러한 런타임 단편화는 열에 저장된 인스턴스의 크기와 수에 따라 비용이 많이 들 수 있습니다.

XML BLOB을 쿼리하는 것이 사용자의 응용 프로그램 환경에서 일반적인 경우 이것은 xml 형식 열을 인덱싱하는 데 도움이 됩니다. 그러나 데이터 수정 중 인덱스를 유지 관리하는 비용이 듭니다.

섹션 내용

항목

설명

기본 XML 인덱스

기본 XML 인덱스와 이 인덱스의 행에 대해 설명합니다.

보조 XML 인덱스

세 가지 유형의 보조 XML 인덱스에 대해 설명합니다.

XML 인덱스 만들기

기본 및 보조 XML 인덱스를 만드는 방법에 대해 설명합니다.

XML 인덱스 수정

ALTER INDEX 문을 사용하여 XML 인덱스를 수정하는 방법에 대해 설명합니다.

XML 인덱스 삭제

DROP INDEX 문을 사용하여 인덱스를 삭제하는 방법에 대해 설명합니다.

XML 열의 전체 텍스트 인덱스

XML 열에 전체 텍스트 인덱스를 만드는 방법에 대해 설명합니다.