선택적 XML 인덱스에 대한 경로 및 최적화 힌트 지정Specify Paths and Optimization Hints for Selective XML Indexes

이 항목에서는 선택적 XML 인덱스를 만들거나 변경할 때 인덱싱할 노드 경로 및 인덱싱에 대한 최적화 힌트를 지정합니다.This topic describes how to specify node paths to index and optimization hints for indexing when you create or alter selective XML indexes.

노드 경로 및 최적화 힌트는 다음 문 중 하나에 동시에 지정합니다.You specify node paths and optimization hints at the same time in one of the following statements:

형식화된 XML의 XQuery 및 SQL Server 유형 이해 Understanding XQuery and SQL Server Types in Untyped XML

선택적 XML 인덱스는 XQuery 유형 및 SQL ServerSQL Server 유형의 두 가지 유형 시스템을 지원합니다.Selective XML indexes support two type systems: XQuery types and SQL ServerSQL Server types. 인덱싱된 경로는 XQuery 식을 일치시키거나 XML 데이터 형식의 value() 메서드에 대한 반환 형식을 일치시키는 데 사용할 수 있습니다.The indexed path can be used either to match an XQuery expression, or to match the return type of the value() method of the XML data type.

  • 인덱싱할 경로에 주석이 지정되어 있지 않거나 XQUERY 키워드로 주석이 지정된 경우 해당 경로는 XQuery 식과 일치합니다.When a path to index is not annotated, or is annotated with the XQUERY keyword, the path matches an XQuery expression. XQUERY로 주석이 지정된 노드 경로에는 다음과 같은 두 가지 변형이 있습니다.There are two variations for XQUERY-annotated node paths:

    • XQUERY 키워드 및 XQuery 데이터 형식을 지정하지 않으면 기본 매핑이 사용됩니다.If you do not specify the XQUERY keyword and the XQuery data type, then default mappings are used. 이 경우 일반적으로 성능 및 저장소는 효율적이지 않습니다.Typically performance and storage are not optimal.

    • XQUERY 키워드 및 XQuery 데이터 형식을 지정하고 선택적으로 다른 최적화 옵션을 지정하면 가능한 최상의 성능과 가능한 가장 효율적인 저장소를 얻을 수 있지만If you specify the XQUERY keyword and the XQuery data type, and optionally other optimization hints, then you can achieve the best possible performance and the most efficient possible storage. 캐스팅은 실패할 수 있습니다.However, a cast can fail.

  • 인덱싱할 경로에 SQL 키워드로 주석이 지정된 경우 해당 경로는 XML 데이터 형식의 value() 메서드에 대한 반환 형식과 일치합니다.When a path to index is annotated with the SQL keyword, the path matches the return type of the value() method of the XML data type. value() 메서드의 반환 형식인 적절한 SQL ServerSQL Server 데이터 형식을 지정하십시오.Specify the appropriate SQL ServerSQL Server data type, which is the return type that you expect from the value() method.

    XML 데이터 형식의 value() 메서드에 적용되는 SQL ServerSQL Server 유형 시스템과 XQuery 식 XML 유형 시스템과 간에는 약간의 차이가 있습니다.There are subtle differences between the XQuery expressions XML type system and the SQL ServerSQL Server type system applied to the value() method of the XML data type. 이러한 차이점은 다음과 같습니다.These differences include the following:

  • XQuery 유형 시스템은 후행 공백을 인식합니다.The XQuery type system is aware of trailing spaces. 예를 들어 XQuery 유형 의미 체계에서는 문자열 "abc"와 "abc "가 같은 문자열이 아니지만 SQL ServerSQL Server 에서는 이러한 문자열이 같은 문자열입니다.For example, according to XQuery type semantics, the strings "abc" and "abc " are not equal, while in SQL ServerSQL Server these strings are equal.

  • XQuery 부동 소수점 데이터 형식에서는 +/- 0 및 +/- 무한대와 같은 특수 값이 지원되지만XQuery floating point data types support special values of +/- zero and +/- infinity. SQL ServerSQL Server 부동 소수점 데이터 형식에서는 이러한 특수 값이 지원되지 않습니다.These special values are not supported in the SQL ServerSQL Server floating point data types.

형식화되지 않은 XML의 XQuery 유형XQuery Types in Untyped XML

  • XQuery 유형은 value() 메서드를 비롯한 XML 데이터 형식의 모든 메서드에 있는 XQuery 식과 일치합니다.XQuery types match XQuery expressions in all methods of the XML data type including the value() method.

  • XQuery 유형은 node(), SINGLETON, DATA TYPE 및 MAXLENGTH 최적화 힌트를 지원합니다.XQuery types support these optimization hints: node(), SINGLETON, DATA TYPE, and MAXLENGTH.

    형식화되지 않은 XML에 대한 XQuery 식의 작업 모드는 다음 두 가지 중에서 선택할 수 있습니다.For XQuery expressions over untyped XML, you can choose between two modes of operation:

  • 기본 매핑 모드.Default mapping mode. 이 모드에서는 선택적 XML 인덱스를 만들 때만 경로를 지정합니다.In this mode, you specify only the path when creating a selective XML index.

  • 사용자 지정 매핑 모드.User-specified mapping mode. 이 모드에서는 선택적 최적화 힌트와 경로를 둘 다 지정합니다.In this mode, you specify both the path and optional optimization hints.

    기본 매핑 모드에서는 안전하고 일반적인 저장소 옵션을 사용합니다.The default mapping mode uses a conservative storage option which is always safe and general. 따라서 경로가 모든 식 유형과 일치할 수 있습니다.It can match any expression type. 런타임 캐스팅이 더 많이 필요하고 보조 인덱스를 사용할 수 없기 때문에 기본 매핑 모드의 제한은 최상의 성능보다 낮습니다.A limitation of the default mapping mode is less than optimal performance, because an increased number of runtime casts are required, and secondary indexes are not available.

    다음은 기본 매핑을 사용하여 만든 선택적 XML 인덱스의 예입니다.Here is an example of a selective XML index created with default mappings. 세 경로 모두에 기본 노드 형식(xs:untypedAtomic) 및 카디널리티가 사용됩니다.For all three paths, the default node type (xs:untypedAtomic) and cardinality are used.

CREATE SELECTIVE XML INDEX example_sxi_UX_default  
ON Tbl(xmlcol)  
FOR  
(  
mypath01 =  '/a/b',  
mypath02 = '/a/b/c',  
mypath03 = '/a/b/d'  
)  

사용자 지정 매핑 모드를 사용하면 더 나은 성능을 얻기 위해 노드에 유형 및 카디널리티를 지정할 수 있습니다.The user-specified mapping mode lets you specify a type and cardinality for the node to obtain better performance. 그러나 캐스팅이 실패할 수 있고 지정된 유형만 선택적 XML 인덱스와 일치하므로 이 향상된 성능은 보안의 희생을 통해 얻어집니다.However, this improved performance is achieved by giving up safety – because a cast can fail - and generality – because only the specified type is matched with the selective XML index.

형식화되지 않은 XML에 대해 지원되는 XQuery 형식은 다음과 같습니다.The XQuery types supported for untyped XML case are:

  • xs:booleanxs:boolean

  • xs:doublexs:double

  • xs:stringxs:string

  • xs:datexs:date

  • xs:timexs:time

  • xs:dateTimexs:dateTime

    노드에 유형을 지정하지 않으면 해당 노드는 xs:untypedAtomic 데이터 형식인 것으로 간주됩니다.If the type is not specified, the node is assumed to be of the xs:untypedAtomic data type.

    다음과 같은 방법으로 선택적 XML 인덱스를 최적화할 수 있습니다.You can optimize the selective XML index shown in the following manner:

CREATE SELECTIVE XML INDEX example_sxi_UX_optimized  
ON Tbl(xmlcol)  
FOR  
(  
mypath= '/a/b' as XQUERY 'node()',  
pathX = '/a/b/c' as XQUERY 'xs:double' SINGLETON,  
pathY = '/a/b/d' as XQUERY 'xs:string' MAXLENGTH(200) SINGLETON  
)  
-- mypath – Only the node value is needed; storage is saved.  
-- pathX – Performance is improved; secondary indexes are possible.  
-- pathY - Performance is improved; secondary indexes are possible; storage is saved.  

형식화되지 않은 XML의 SQL Server 유형SQL Server Types in Untyped XML

  • SQL ServerSQL Server 유형은 value() 메서드의 반환 값과 일치합니다. types match the return value of the value() method.

  • SQL ServerSQL Server 유형은 SINGLETON의 최적화 힌트를 지원합니다. types support this optimization hint: SINGLETON.

    SQL ServerSQL Server 유형을 반환하는 경로에는 유형을 반드시 지정해야 합니다.Specifying a type is mandatory for paths that return SQL ServerSQL Server types. 이 경우 value() 메서드에서 사용하는 것과 동일한 SQL ServerSQL Server 유형을 지정해야 합니다.Use the same SQL ServerSQL Server type that you would use in the value() method.

    다음 쿼리를 살펴보십시오.Consider the following query:

SELECT T.record,  
    T.xmldata.value('(/a/b/d)[1]', 'NVARCHAR(200)')  
FROM myXMLTable T  

지정된 쿼리는 NVARCHAR(200) 데이터 형식으로 압축된 /a/b/d 경로에서 값을 반환하기 때문에 노드에 지정할 데이터 형식이 분명합니다.The specified query returns a value from the path /a/b/d packed into an NVARCHAR(200) data type, so the data type to specify for the node is obvious. 그러나 형식화되지 않은 XML로 노드의 카디널리티를 지정할 수 있는 스키마는 없습니다.However there is no schema to specify the cardinality of the node in untyped XML. d 노드가 해당 부모 노드인 b에 최대 한 번만 표시되도록 지정하려면 다음과 같이 SINGLETON 최적화 힌트를 사용하는 선택적 XML 인덱스를 만듭니다.To specify that node d appears at most once under its parent node b, create a selective XML index that uses the SINGLETON optimization hint as follows:

CREATE SELECTIVE XML INDEX example_sxi_US  
ON Tbl(xmlcol)  
FOR  
(  
node1223 = '/a/b/d' as SQL NVARCHAR(200) SINGLETON  
)  

형식화된 XML에 대한 선택적 XML 인덱스 지원 이해 Understanding Selective XML Index support for typed XML

SQL ServerSQL Server 의 형식화된 XML은 지정된 XML 문서와 연결된 스키마입니다.Typed XML in SQL ServerSQL Server is a schema associated with a given XML document. 스키마는 전체 문서 구조와 노드 유형을 정의합니다.The schema defines overall document structure and types of nodes. 스키마가 있으면 사용자가 경로를 승격시킬 때 선택적 XML 인덱스가 해당 스키마 구조를 적용하기 때문에 경로에 대한 XQUERY 유형을 지정할 필요가 없습니다.If a schema exists, Selective XML Index applies the schema structure when the user promotes paths, so there is no need to specify the XQUERY types for paths.

선택적 XML 인덱스는 다음 XSD 유형을 지원합니다.Selective XML Index supports following XSD types:

  • xs:anyUrixs:anyUri

  • xs:booleanxs:boolean

  • xs:datexs:date

  • xs:dateTimexs:dateTime

  • xs:dayxs:day

  • xs:decimalxs:decimal

  • xs:doublexs:double

  • xs:floatxs:float

  • xs:intxs:int

  • xs:integerxs:integer

  • xs:languagexs:language

  • xs:longxs:long

  • xs:namexs:name

  • xs:NCNamexs:NCName

  • xs:negativeIntegerxs:negativeInteger

  • xs:nmtokenxs:nmtoken

  • xs:nonNegativeIntegerxs:nonNegativeInteger

  • xs:nonPositiveIntegerxs:nonPositiveInteger

  • xs:positiveIntegerxs:positiveInteger

  • xs:qnamexs:qname

  • xs:shortxs:short

  • xs:stringxs:string

  • xs:timexs:time

  • xs:tokenxs:token

  • xs:unsignedBytexs:unsignedByte

  • xs:unsignedIntxs:unsignedInt

  • xs:unsignedLongxs:unsignedLong

  • xs:unsignedShortxs:unsignedShort

    스키마가 연결되어 있는 문서에 대해 선택적 XML 인덱스를 만드는 경우 인덱스를 만들거나 변경할 때 XQUERY 유형을 지정하면 오류가 반환됩니다.When Selective XML Index is created over a document that has schema associated with it, specifying a XQUERY type at index creation or altering returns an error. 사용자는 경로 승격 부분에 SQL 유형 주석을 사용할 수 있습니다.The user can use SQL type annotations in the path promotion part. SQL 유형은 스키마에 정의된 XSD 유형으로부터의 유효한 변환이어야 합니다. 그렇지 않으면 예외가 발생합니다.The SQL type must be a valid conversion from the XSD type defined in the schema, or an error is thrown. 날짜/시간 유형을 제외하고 XSD로 적절하게 표현된 모든 SQL 유형이 지원됩니다.All SQL types that have adequate representation in XSD are supported, with an exception of date/time types.

참고

선택적 인덱스는 선택적 XML 인덱스 경로 승격에 지정된 유형이 value() 메서드 반환 값과 같을 경우 사용됩니다.The selective index is used if the type specified in the Selective XML Index path promotion is the same as the value() method return value.

다음은 형식화된 XML 문서에서 사용할 수 있는 최적화 힌트입니다.The following optimization hints can be used with typed XML documents:

  • node() 최적화 힌트node() optimization hint.

  • MAXLENGTH 최적화 힌트는 인덱싱된 값을 줄이기 위해 xs:string 유형과 함께 사용될 수 있습니다.MAXLENGTH optimization hint can be used with xs:string types to shorten the indexed value.

    최적화 힌트에 대한 자세한 내용은 최적화 힌트 지정을 참조하십시오.For more information about optimization hints, see Specifying Optimization Hints.

경로 지정 Specifying Paths

선택적 XML 인덱스를 사용하면 저장된 XML 데이터에서 실행할 쿼리와 관련 있는 노드의 하위 집합만 인덱싱할 수 있습니다.A selective XML index lets you index only a subset of nodes from the stored XML data that are relevant for the queries that you expect to run. 관련 노드의 하위 집합이 XML 문서에 있는 총 노드 수보다 훨씬 적을 경우 선택적 XML 인덱스는 관련 노드만 저장합니다.When the subset of relevant nodes is much smaller than the total number of nodes in the XML document, the selective XML index stores only the relevant nodes. 선택적 XML 인덱스를 사용하려면 인덱싱할 노드의 올바른 하위 집합을 식별해야 합니다.To benefit from a selective XML index, identify the correct subset of nodes to index.

인덱싱할 노드 선택Choosing the nodes to index

다음과 같은 두 가지 간단한 원칙을 사용하여 선택적 XML 인덱스에 추가할 노드의 올바른 하위 집합을 식별할 수 있습니다.You can use the following two simple principles to identify the correct subset of nodes to add to a selective XML index.

  1. 원칙 1: 지정된 XQuery 식을 평가하려면 검사할 모든 노드를 인덱싱합니다.Principle 1: To evaluate a given XQuery expression, index all nodes that you need to examine.

    • 존재 여부 또는 값이 XQuery 식에 사용되는 모든 노드를 인덱싱합니다.Index all nodes whose existence or value is used in the XQuery expression.

    • XQuery 조건자가 적용되는 XQuery 식의 모든 노드를 인덱싱합니다.Index all nodes in the XQuery expression on which XQuery predicates are applied.

      이 항목의 샘플 XML 문서 에 대한 다음과 같은 간단한 쿼리를 살펴보십시오.Consider the following simple query over the sample XML document in this topic:

    SELECT T.record FROM myXMLTable T  
    WHERE T.xmldata.exist('/a/b[./c = "43"]') = 1  
    

    아 쿼리를 만족하는 XML 인스턴스를 반환하려면 선택적 XML 인덱스가 각 XML 인스턴스에서 다음 두 노드를 검사해야 합니다.In order to return the XML instances that satisfy this query, a selective XML index needs to examine two nodes in every XML instance:

    • c노드(해당 값이 XQuery 식에 사용되므로)Node c, because its value is used in the XQuery expression.

    • b노드(XQuery 식에서b 노드에 대해 조건자가 적용되므로)Node b, because a predicate is applied over nodeb in the XQuery expression.

  2. 원칙 2: 최상의 성능을 위해 지정된 XQuery 식을 평가하는 데 필요한 모든 노드를 인덱싱합니다.Principle 2: For best performance, index all nodes that are required to evaluate a given XQuery expression. 이러한 노드 중 일부만 인덱싱할 경우 선택적 XML 인덱스가 인덱싱된 노드만 포함하는 하위 식의 평가를 향상시킵니다.If you index only some of the nodes, then the selective XML index improves the evaluation of sub-expressions that include only indexed nodes.

    위에 표시된 SELECT 문의 성능을 향상시키기 위해 다음과 같은 선택적 XML 인덱스를 만들 수 있습니다.To improve the performance of the SELECT statement shown above, you can create the following selective XML index:

CREATE SELECTIVE XML INDEX simple_sxi  
ON Tbl(xmlcol)  
FOR  
(  
    path123 =  '/a/b',  
    path124 =  '/a/b/c'  
)  

동일한 경로 인덱싱Indexing identical paths

동일한 경로를 서로 다른 경로 이름을 사용하는 동일한 데이터 형식으로 승격시킬 수 없습니다.You cannot promote identical paths as the same data type under different path names. 예를 들어 다음 쿼리를 실행하면 pathOnepathTwo 가 동일하기 때문에 오류가 발생합니다.For example, the following query raises an error, because pathOne and pathTwo are identical:

CREATE SELECTIVE INDEX test_simple_sxi ON T1(xmlCol)  
FOR  
(  
    pathOne = 'book/authors/authorID' AS XQUERY 'xs:string',  
    pathTwo = 'book/authors/authorID' AS XQUERY 'xs:string'  
)  

그러나 동일한 경로를 서로 다른 이름을 사용하는 서로 다른 데이터 형식으로는 승격시킬 수 있습니다.However, you can promote identical paths as different data types with different names. 예를 들어 다음 쿼리는 데이터 형식이 다르기 때문에 허용될 수 있습니다.For example, the following query is now acceptable, because the data types are different:

CREATE SELECTIVE INDEX test_simple_sxi ON T1(xmlCol)  
FOR  
(  
    pathOne = 'book/authors/authorID' AS XQUERY 'xs:double',  
    pathTwo = 'book/authors/authorID' AS XQUERY 'xs:string'  
)  

Examples

다음은 서로 다른 XQuery 형식에 대해 인덱싱할 올바른 노드를 선택하는 몇 가지 추가 예입니다.Here are some additional examples of selecting the correct nodes to index for different XQuery types.

예제 1Example 1

다음은 exist() 메서드를 사용하는 간단한 XQuery입니다.Here is a simple XQuery that uses the exist() method:

SELECT T.record FROM myXMLTable T  
WHERE T.xmldata.exist('/a/b/c/d/e/h') = 1  

다음 표에서는 이 쿼리가 선택적 XML 인덱스를 사용할 수 있도록 하기 위해 인덱싱해야 하는 노드를 보여 줍니다.The following table shows the nodes that should be indexed to let this query use the selective XML index.

인덱스에 포함할 열Node to include in the index 이 노드를 인덱싱하는 이유Reason for indexing this node
/a/b/c/d/e/h/a/b/c/d/e/h h 노드의 존재 여부가 exist() 메서드에서 평가됩니다.The existence of node h is evaluated in the exist() method.

예제 2Example 2

다음은 조건자가 적용된 이전 XQuery의 보다 복잡한 변형입니다.Here is a more complex variation of the previous XQuery, with a predicate applied:

SELECT T.record FROM myXMLTable T  
WHERE T.xmldata.exist('/a/b/c/d/e[./f = "SQL"]') = 1  

다음 표에서는 이 쿼리가 선택적 XML 인덱스를 사용할 수 있도록 하기 위해 인덱싱해야 하는 노드를 보여 줍니다.The following table shows the nodes that should be indexed to let this query use the selective XML index.

인덱스에 포함할 열Node to include in the index 이 노드를 인덱싱하는 이유Reason for indexing this node
/a/b/c/d/e/a/b/c/d/e 조건자가 e노드를 통해 적용됩니다.A predicate is applied over node e.
/a/b/c/d/e/f/a/b/c/d/e/f f 노드의 값이 조건자 내에서 평가됩니다.The value of node f is evaluated inside the predicate.

예 3Example 3

다음은 value() 절이 포함된 보다 복잡한 쿼리입니다.Here is a more complex query with a value() clause:

SELECT T.record,  
    T.xmldata.value('(/a/b/c/d/e[./f = "SQL"]/g)[1]', 'nvarchar(100)')  
FROM myXMLTable T  

다음 표에서는 이 쿼리가 선택적 XML 인덱스를 사용할 수 있도록 하기 위해 인덱싱해야 하는 노드를 보여 줍니다.The following table shows the nodes that should be indexed to let this query use the selective XML index.

인덱스에 포함할 열Node to include in the index 이 노드를 인덱싱하는 이유Reason for indexing this node
/a/b/c/d/e/a/b/c/d/e 조건자가 e노드를 통해 적용됩니다.A predicate is applied over node e.
/a/b/c/d/e/f/a/b/c/d/e/f f 노드의 값이 조건자 내에서 평가됩니다.The value of node f is evaluated inside the predicate.
/a/b/c/d/e/g/a/b/c/d/e/g g 노드의 값이 value() 메서드에 의해 반환됩니다.The value of node g is returned by the value() method.

예제 4Example 4

다음은 exist() 절 내의 FLWOR 절을 사용하는 쿼리입니다.Here is a query that uses a FLWOR clause inside an exist() clause. (FLWOR이라는 이름은 XQuery FLWOR 식을 구성하는 다섯 개의 절인 for, let, where, order by 및 return에서 따온 것입니다.)(The name FLWOR comes from the five clauses that can make up an XQuery FLWOR expression: for, let, where, order by, and return.)

SELECT T.record FROM myXMLTable T  
WHERE T.xmldata.exist('  
  For $x in /a/b/c/d/e  
  Where $x/f = "SQL"  
  Return $x/g  
') = 1  

다음 표에서는 이 쿼리가 선택적 XML 인덱스를 사용할 수 있도록 하기 위해 인덱싱해야 하는 노드를 보여 줍니다.The following table shows the nodes that should be indexed to let this query use the selective XML index.

인덱스에 포함할 열Node to include in the index 이 노드를 인덱싱하는 이유Reason for indexing this node
/a/b/c/d/e/a/b/c/d/e e 노드의 존재 여부가 FLWOR 절에서 평가됩니다.The existence of node e is evaluated in the FLWOR clause.
/a/b/c/d/e/f/a/b/c/d/e/f f 노드의 값이 FLWOR 절에서 평가됩니다.The value of node f is evaluated in the FLWOR clause.
/a/b/c/d/e/g/a/b/c/d/e/g g 노드의 존재 여부가 exist() 메서드에 의해 평가됩니다.The existence of node g is evaluated by the exist() method.

최적화 힌트 지정 Specifying Optimization Hints

선택적 최적화 힌트를 사용하여 선택적 XML 인덱스에 의해 인덱싱되는 노드에 대한 추가 매핑 정보를 지정할 수 있습니다.You can use optional optimization hints to specify additional mapping details for a node indexed by a selective XML index. 예를 들어 노드의 데이터 형식과 카디널리티, 그리고 데이터의 구조에 대한 특정 정보를 지정할 수 있습니다.For example, you can specify the data type and cardinality of the node, and certain information about the structure of the data. 이 추가 정보를 사용하면 매핑이 향상될 뿐 아니라This additional information supports better mapping. 성능과 저장소의 저장 능력도 향상됩니다.It also results in improvements in performance or savings in storage, or both.

최적화 힌트의 사용은 선택 사항입니다.The use of optimization hints is optional. 언제든지 기본 매핑을 그대로 사용할 수 있습니다. 그러나 기본 매핑을 사용하면 안정적이기는 하지만 최적의 성능과 저장을 사용하지 못할 수도 있습니다.You can always accept the default mappings, which are reliable but may not provide optimal performance and storage.

SINGLETON 힌트와 같은 일부 최적화 힌트는 데이터에 대한 제약 조건을 소개합니다.Some optimization hints – for example, the SINGLETON hint - introduce constraints over your data. 경우에 따라 이러한 제약 조건을 충족하지 못할 경우 오류가 발생할 수 있습니다.In some cases, errors may be raised when those constraints are not met.

최적화 힌트의 이점Benefits of Optimization Hints

다음 표에서는 보다 효율적인 저장소 및 향상된 성능을 지원하는 최적화 힌트를 보여 줍니다.The following table identifies the optimization hints that support more efficient storage or improved performance.

최적화 힌트Optimization hint 보다 효율적인 저장소More efficient storage 성능 향상Improved performance
node()node() Yes 아니요No
SINGLETONSINGLETON 아니요No Yes
DATA TYPEDATA TYPE Yes Yes
MAXLENGTHMAXLENGTH Yes Yes

최적화 힌트 및 데이터 형식Optimization Hints and Data Types

노드를 XQuery 데이터 형식 또는 SQL ServerSQL Server 데이터 형식으로 인덱싱할 수 있습니다.You can index nodes as XQuery data types or as SQL ServerSQL Server data types. 다음 표에서는 각 데이터 형식에서 지원되는 최적화 힌트를 보여 줍니다.The following table shows which optimization hints are supported with each data type.

최적화 힌트Optimization hint XQuery 데이터 형식XQuery data types SQL 데이터 형식SQL data types
node()node() Yes 아니요No
SINGLETONSINGLETON Yes Yes
DATA TYPEDATA TYPE Yes 아니요No
MAXLENGTHMAXLENGTH Yes 아니요No

node() 최적화 힌트node() optimization hint

적용 대상: XQuery 데이터 형식Applies to: XQuery data types

node() 최적화를 사용하여 일반 쿼리를 평가하는 데 필요 없는 값을 가진 노드를 지정합니다.You can use the node() optimization to specify a node whose value is not required to evaluate the typical query. 이 힌트는 일반 쿼리가 노드의 존재 여부를 평가하기만 하면 될 때 저장소 요구 사항을 줄여줍니다.This hint reduces storage requirements when the typical query only has to evaluate the existence of the node. 기본적으로 선택적 XML 인덱스는 복잡한 노드 유형을 제외하고 승격된 모든 노드의 값을 저장합니다.(By default, a selective XML index stores the value for all promoted nodes, except complex node types.)

다음 예를 살펴 보십시오.Consider the following example:

SELECT T.record FROM myXMLTable T  
WHERE T.xmldata.exist('/a/b[./c=5]') = 1  

선택적 XML 인덱스를 사용하여 이 쿼리를 평가하려면 bc노드를 승격시킵니다.To use a selective XML index to evaluate this query, promote nodes b and c. 그러나 b 노드의 값이 필요 없기 때문에 node() 힌트를 다음 구문과 함께 사용할 수 있습니다.However, since the value of node b is not required, you can use the node() hint with the following syntax:

/a/b/ as node()

쿼리에 node() 힌트를 사용하여 인덱싱된 노드의 값이 필요한 경우에는 선택적 XML 인덱스를 사용할 수 없습니다.If a query requires the value of a node that has been indexed with the node() hint, then the selective XML index cannot be used.

SINGLETON 최적화 힌트SINGLETON optimization hint

적용 대상: XQuery 또는 SQL ServerSQL Server 데이터 형식Applies to: XQuery or SQL ServerSQL Server data types

SINGLETON 최적화 힌트는 노드의 카디널리티를 지정합니다.The SINGLETON optimization hint specifies the cardinality of a node. 이 힌트를 사용하면 노드가 해당 부모 노드 또는 상위 항목에 최대 한 번만 표시된다는 것을 미리 알 수 있기 때문에 쿼리 성능이 향상됩니다.This hint improves query performance since it is known in advance that a node appears at most one time within its parent or ancestor.

이 항목의 샘플 XML 문서 를 살펴보십시오.Consider the sample XML document in this topic.

선택적 XML 인덱스를 사용하여 이 문서를 쿼리하려면 d 노드에 대해 SINGLETON 힌트를 지정하면 됩니다. 이는 이 노드가 해당 부모 노드에 최대 한 번만 표시되기 때문입니다.To use a selective XML index to query this document, you can specify the SINGLETON hint for node d since it appears at most one time within its parent.

SINGLETON 힌트가 지정되었지만 노드가 해당 부모 노드 또는 상위 항목에 두 번 이상 표시되면 기존 데이터에 대한 인덱스를 만들거나 새 데이터에 대한 쿼리를 실행할 때 오류가 발생합니다.If the SINGLETON hint has been specified, but a node appears more than one time within its parent or ancestor, then an error is raised when you create the index (for existing data) or when you run a query (for new data).

DATA TYPE 최적화 힌트DATA TYPE optimization hint

적용 대상: XQuery 데이터 형식Applies to: XQuery data types

DATA TYPE 최적화 힌트를 사용하면 인덱싱된 노드에 대해 XQuery 또는 SQL ServerSQL Server 데이터 형식을 지정할 수 있습니다.The DATA TYPE optimization hint lets you specify an XQuery or a SQL ServerSQL Server data type for the indexed node. 이 데이터 형식은 선택적 XML 인덱스의 데이터 테이블에서 인덱싱된 노드에 해당하는 열에 사용됩니다.The data type is used for the column in the data table of the selective XML index that corresponds to the indexed node.

기존 값을 지정된 데이터 형식으로 캐스팅하는 작업이 실패해도 인덱스에 대한 삽입 작업은 실패하지 않지만 인덱스의 데이터 테이블에 null 값이 삽입됩니다.When casting an existing value to the specified data type fails, the insert operation (into the index) does not fail; however, a null value is inserted into the data table of the index.

MAXLENGTH 최적화 힌트MAXLENGTH optimization hint

적용 대상: XQuery 데이터 형식Applies to: XQuery data types

MAXLENGTH 최적화 힌트를 사용하면 xs:string 데이터의 길이를 제한할 수 있습니다.The MAXLENGTH optimization hint lets you limit the length of xs:string data. VARCHAR 또는 NVARCHAR 데이터 형식을 지정할 때 길이를 지정하므로 MAXLENGTH는 SQL ServerSQL Server 데이터 형식과는 관련이 없습니다.MAXLENGTH is not relevant for SQL ServerSQL Server data types since you specify the length when you specify the VARCHAR or NVARCHAR date types.

기존 문자열이 지정된 MAXLENGTH보다 길면 인덱스에 값을 삽입하는 작업이 실패합니다.When an existing string is longer than the specified MAXLENGTH, then inserting that value into the index fails.

예제용 샘플 XML 문서 Sample XML Document for Examples

다음 샘플 XML 문서는 이 항목의 예에서 참조됩니다.The following sample XML document is referenced in the examples in this topic:

<a>  
    <b>  
         <c atc="aa">10</c>  
         <c atc="bb">15</c>  
         <d atd1="dd" atd2="ddd">md </d>  
    </b>  
     <b>  
        <c></c>  
        <c atc="">117</c>  
     </b>  
</a>  

참고 항목See Also

SXI(선택적 XML 인덱스) Selective XML Indexes (SXI)
선택적 XML 인덱스 만들기, 변경 및 삭제 Create, Alter, and Drop Selective XML Indexes