Specificare percorsi e hint di ottimizzazione per indici XML selettiviSpecify Paths and Optimization Hints for Selective XML Indexes

In questo argomento viene descritto come specificare i percorsi del nodo da indicizzare e gli hint di ottimizzazione per l'indicizzazione in fase di creazione o modifica di indici XML selettivi.This topic describes how to specify node paths to index and optimization hints for indexing when you create or alter selective XML indexes.

Specificare contemporaneamente i percorsi del nodo e gli hint di ottimizzazione in una delle istruzioni seguenti:You specify node paths and optimization hints at the same time in one of the following statements:

Informazioni sui tipi XQuery e SQL Server in dati XML non tipizzati Understanding XQuery and SQL Server Types in Untyped XML

Negli indici XML selettivi sono supportati due sistemi di tipi: tipi XQuery e tipi SQL ServerSQL Server .Selective XML indexes support two type systems: XQuery types and SQL ServerSQL Server types. Il percorso indicizzato può essere utilizzato per la corrispondenza di un'espressione XQuery o del tipo restituito del metodo value() del tipo di dati XML.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.

  • Se un percorso da indicizzare non viene annotato oppure viene annotato con la parola chiave XQUERY, il percorso corrisponde a un'espressione XQuery.When a path to index is not annotated, or is annotated with the XQUERY keyword, the path matches an XQuery expression. Esistono due varianti per i percorsi dei nodi con annotazioni XQuery:There are two variations for XQUERY-annotated node paths:

    • Se non si specificano la parola chiave XQUERY e il tipo di dati XQuery, vengono utilizzati i mapping predefiniti.If you do not specify the XQUERY keyword and the XQuery data type, then default mappings are used. In genere le prestazioni e l'archiviazione non raggiungono livelli ottimali.Typically performance and storage are not optimal.

    • Se si specificano la parola chiave XQUERY e il tipo di dati XQuery (e facoltativamente altri hint di ottimizzazione), è possibile ottenere prestazioni ottimali e un livello estremamente efficiente di archiviazione.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. Un cast potrebbe tuttavia avere esito negativo.However, a cast can fail.

  • Se un percorso da indicizzare viene annotato con la parola chiave SQL, il percorso corrisponde al tipo restituito del metodo value() del tipo di dati XML.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. Specificare il tipo di dati SQL ServerSQL Server appropriato, ovvero il tipo restituito previsto dal metodo value().Specify the appropriate SQL ServerSQL Server data type, which is the return type that you expect from the value() method.

    Esistono differenze minime tra il sistema di tipi XML di espressioni XQuery e il sistema di tipi SQL ServerSQL Server validi per il metodo value() del tipo di dati 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. Di seguito sono riportate queste differenze:These differences include the following:

  • Il sistema di tipi XQuery riconosce gli spazi finali.The XQuery type system is aware of trailing spaces. Ad esempio, in base alla semantica del tipo XQuery, le stringhe "abc" e "abc " non sono uguali, a differenza di quanto accade in 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.

  • I tipi di dati a virgola mobile XQuery supportano valori speciali di +/- zero e +/- infinito.XQuery floating point data types support special values of +/- zero and +/- infinity. Questi valori speciali non sono supportati nei tipi di dati a virgola mobile SQL ServerSQL Server .These special values are not supported in the SQL ServerSQL Server floating point data types.

Tipi XQuery in dati XML non tipizzatiXQuery Types in Untyped XML

  • I tipi XQuery corrispondono alle espressioni XQuery in tutti i metodi del tipo di dati XML, incluso il metodo value().XQuery types match XQuery expressions in all methods of the XML data type including the value() method.

  • I tipi XQuery supportano questi hint di ottimizzazione: node(), SINGLETON, DATA TYPE e MAXLENGTH.XQuery types support these optimization hints: node(), SINGLETON, DATA TYPE, and MAXLENGTH.

    Per le espressioni XQuery in dati XML non tipizzati, è possibile scegliere tra due modalità di esecuzione:For XQuery expressions over untyped XML, you can choose between two modes of operation:

  • Modalità di mapping predefinito.Default mapping mode. In questa modalità è necessario specificare solo il percorso in fase di creazione di un indice XML selettivo.In this mode, you specify only the path when creating a selective XML index.

  • Modalità di mapping definito dall'utente.User-specified mapping mode. In questa modalità è necessario specificare il percorso e hint di ottimizzazione facoltativi.In this mode, you specify both the path and optional optimization hints.

    Nella modalità di mapping predefinito viene utilizzata un'opzione di archiviazione conservativa, generica e sempre sicura.The default mapping mode uses a conservative storage option which is always safe and general. Può corrispondere a qualsiasi tipo di espressione.It can match any expression type. Alcune limitazioni della modalità di mapping predefinito sono rappresentate da prestazioni non ottimali, dovute alla necessità di eseguire un numero maggiore di cast di runtime, e dalla mancanza di indici secondari.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.

    Di seguito è riportato un esempio di un indice XML selettivo creato con mapping predefiniti.Here is an example of a selective XML index created with default mappings. Per tutti e tre i percorsi vengono usati il tipo di nodo predefinito (xs:untypedAtomic) e la cardinalità.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'  
)  

La modalità di mapping definito dall'utente consente di specificare un tipo e la cardinalità del nodo per ottenere prestazioni migliori.The user-specified mapping mode lets you specify a type and cardinality for the node to obtain better performance. Questo miglioramento nelle prestazioni viene tuttavia conseguito a discapito della sicurezza (poiché un cast potrebbe avere esito negativo), in quanto la corrispondenza con l'indice XML selettivo viene effettuata solo per il tipo specificato.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.

Di seguito sono indicati i tipi XQuery supportati per i dati XML non tipizzati: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

    Se il tipo viene omesso, il nodo verrà considerato del tipo di dati xs:untypedAtomic .If the type is not specified, the node is assumed to be of the xs:untypedAtomic data type.

    È possibile ottimizzare l'indice XML selettivo visualizzato nel modo seguente: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.  

Tipi SQL Server in dati XML non tipizzatiSQL Server Types in Untyped XML

  • SQL ServerSQL Server i tipi corrispondono al valore restituito del metodo value(). types match the return value of the value() method.

  • SQL ServerSQL Server i tipi supportano l'hint di ottimizzazione SINGLETON. types support this optimization hint: SINGLETON.

    È obbligatori specificare un tipo per i percorsi che restituiscono i tipi SQL ServerSQL Server .Specifying a type is mandatory for paths that return SQL ServerSQL Server types. Utilizzare lo stesso tipo SQL ServerSQL Server che verrebbe utilizzato nel metodo value().Use the same SQL ServerSQL Server type that you would use in the value() method.

    Si consideri la query seguente:Consider the following query:

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

La query specificata restituisce un valore dal percorso /a/b/d all'interno di un tipo di dati NVARCHAR(200), in modo che il tipo di dati da specificare per il nodo sia facilmente intuibile.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. Non esiste tuttavia uno schema per specificare la cardinalità del nodo in dati XML non tipizzati.However there is no schema to specify the cardinality of the node in untyped XML. Per specificare che il nodo d venga visualizzato al massimo una volta nel nodo padre b, creare un indice XML selettivo in cui venga utilizzato l'hint di ottimizzazione SINGLETON nel modo seguente: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  
)  

Informazioni sul supporto degli indici XML selettivi per dati XML tipizzati Understanding Selective XML Index support for typed XML

I dati XML tipizzati in SQL ServerSQL Server rappresentano uno schema associato a uno specifico documento XML.Typed XML in SQL ServerSQL Server is a schema associated with a given XML document. Lo schema definisce la struttura generica del documento e i tipi di nodi.The schema defines overall document structure and types of nodes. Se esiste uno schema, l'indice XML selettivo applica la sua struttura quando l'utente promuove i percorsi, pertanto non è necessario specificare i tipi XQUERY per i percorsi.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.

Nell'indice XML selettivo vengono supportati i tipi XSD seguenti: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

    Quando viene creato un indice XML selettivo in un documento con uno schema associato, se si specifica un tipo XQUERY in fase di creazione o modifica dell'indice, verrà restituito un errore.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. L'utente può utilizzare annotazioni di tipo SQL nell'ambito della promozione del percorso.The user can use SQL type annotations in the path promotion part. Il tipo SQL deve essere una conversione valida del tipo CLR definito nello schema. In caso contrario, verrà generato un errore.The SQL type must be a valid conversion from the XSD type defined in the schema, or an error is thrown. Sono supportati tutti i tipi SQL con una rappresentazione appropriata in XSD, ad eccezione dei tipi date/time.All SQL types that have adequate representation in XSD are supported, with an exception of date/time types.

Nota

L'indice selettivo viene utilizzato se il tipo specificato nella promozione del percorso dell'indice XML selettivo corrisponde al valore restituito del metodo 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.

Con i documenti XML tipizzati è possibile utilizzare gli hint di ottimizzazione seguenti:The following optimization hints can be used with typed XML documents:

  • hint di ottimizzazione node().node() optimization hint.

  • L'hint di ottimizzazione MAXLENGTH può essere utilizzato con tipi xs:string per abbreviare il valore indicizzato.MAXLENGTH optimization hint can be used with xs:string types to shorten the indexed value.

    Per altre informazioni sugli hint di ottimizzazione, vedere Specifica di hint di ottimizzazione.For more information about optimization hints, see Specifying Optimization Hints.

Specifica di percorsi Specifying Paths

Un indice XML selettivo consente di indicizzare solo un subset di nodi dai dati XML archiviati rilevanti per le query che si intende eseguire.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. Se il subset dei nodi correlati è nettamente inferiore al numero totale di nodi nel documento XML, nell'indice XML selettivo vengono archiviati solo i nodi rilevanti.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. Per trarre vantaggio da un indice XML selettivo, identificare il corretto subset di nodi da indicizzare.To benefit from a selective XML index, identify the correct subset of nodes to index.

Scelta dei nodi da indicizzareChoosing the nodes to index

Per identificare il subset corretto di nodi da aggiungere a un indice XML selettivo, è possibile utilizzare i due semplici principi indicati di seguito.You can use the following two simple principles to identify the correct subset of nodes to add to a selective XML index.

  1. Principio 1: per valutare una specifica espressione XQuery, indicizzare tutti i nodi da esaminare.Principle 1: To evaluate a given XQuery expression, index all nodes that you need to examine.

    • Indicizzare tutti i nodi la cui esistenza o il cui valore viene utilizzato nell'espressione XQuery.Index all nodes whose existence or value is used in the XQuery expression.

    • Indicizzare tutti i nodi dell'espressione XQuery in cui vengono applicati predicati XQuery.Index all nodes in the XQuery expression on which XQuery predicates are applied.

      Si consideri la semplice query sul documento XML di esempio in questo argomento: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  
    

    Per restituire istanze XML che soddisfano la query, un indice XML selettivo deve esaminare due nodi in ogni istanza 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:

    • Il nodo c, in quanto il rispettivo valore viene utilizzato nell'espressione XQuery.Node c, because its value is used in the XQuery expression.

    • Il nodo b, poiché viene applicato un predicato per il nodob nell'espressione XQuery.Node b, because a predicate is applied over nodeb in the XQuery expression.

  2. Principio 2: per ottenere prestazioni ottimali, indicizzare tutti i nodi necessari per valutare una specifica espressione XQuery.Principle 2: For best performance, index all nodes that are required to evaluate a given XQuery expression. Se si indicizzano solo alcuni nodi, l'indice XML selettivo migliora la valutazione delle sottoespressioni che includono solo nodi indicizzati.If you index only some of the nodes, then the selective XML index improves the evaluation of sub-expressions that include only indexed nodes.

    Per migliorare le prestazioni dell'istruzione SELECT precedentemente illustrata, è possibile creare l'indice XML selettivo seguente: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'  
)  

Indicizzazione di percorsi identiciIndexing identical paths

Non è possibile promuovere percorsi identici come tipo di dati identico in nomi di percorso diversi.You cannot promote identical paths as the same data type under different path names. Ad esempio, la query seguente genera un errore, in quanto pathOne e pathTwo sono identici: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'  
)  

È tuttavia possibile promuovere percorsi diversi come tipi di dati diversi con nomi diversi.However, you can promote identical paths as different data types with different names. Ad esempio, la query seguente è accettabile, poiché i tipi di dati sono diversi: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'  
)  

EsempiExamples

Di seguito sono riportati alcuni esempi aggiuntivi di scelta dei nodi corretti da indicizzare per tipi XQuery diversi.Here are some additional examples of selecting the correct nodes to index for different XQuery types.

Esempio 1Example 1

Di seguito è riportata una semplice espressione XQuery in cui viene utilizzato il metodo exist():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  

Nella tabella seguente vengono indicati i nodi da indicizzare per consentire l'utilizzo dell'indice XML selettivo da parte della query.The following table shows the nodes that should be indexed to let this query use the selective XML index.

Nodo da includere nell'indiceNode to include in the index Motivo alla base dell'indicizzazione del nodoReason for indexing this node
/a/b/c/d/e/h/a/b/c/d/e/h L'esistenza del nodo h viene valutata nel metodo exist().The existence of node h is evaluated in the exist() method.

Esempio 2Example 2

Di seguito è riportata una variante più complessa dell'espressione XQuery precedente, con un predicato applicato: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  

Nella tabella seguente vengono indicati i nodi da indicizzare per consentire l'utilizzo dell'indice XML selettivo da parte della query.The following table shows the nodes that should be indexed to let this query use the selective XML index.

Nodo da includere nell'indiceNode to include in the index Motivo alla base dell'indicizzazione del nodoReason for indexing this node
/a/b/c/d/e/a/b/c/d/e Viene applicato un predicato per il nodo e.A predicate is applied over node e.
/a/b/c/d/e/f/a/b/c/d/e/f Il valore del nodo f viene valutato nel predicato.The value of node f is evaluated inside the predicate.

Esempio 3Example 3

Di seguito è riportata una query più complessa con una clausola 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  

Nella tabella seguente vengono indicati i nodi da indicizzare per consentire l'utilizzo dell'indice XML selettivo da parte della query.The following table shows the nodes that should be indexed to let this query use the selective XML index.

Nodo da includere nell'indiceNode to include in the index Motivo alla base dell'indicizzazione del nodoReason for indexing this node
/a/b/c/d/e/a/b/c/d/e Viene applicato un predicato per il nodo e.A predicate is applied over node e.
/a/b/c/d/e/f/a/b/c/d/e/f Il valore del nodo f viene valutato nel predicato.The value of node f is evaluated inside the predicate.
/a/b/c/d/e/g/a/b/c/d/e/g Il valore del nodo g viene restituito dal metodo value().The value of node g is returned by the value() method.

Esempio 4Example 4

Di seguito è riportata una query in cui viene utilizzata una clausola FLWOR in una clausola exist().Here is a query that uses a FLWOR clause inside an exist() clause. Il nome FLWOR deriva dalle cinque clausole che possono costituire un'espressione XQuery FLWOR: for, let, where, order by e 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  

Nella tabella seguente vengono indicati i nodi da indicizzare per consentire l'utilizzo dell'indice XML selettivo da parte della query.The following table shows the nodes that should be indexed to let this query use the selective XML index.

Nodo da includere nell'indiceNode to include in the index Motivo alla base dell'indicizzazione del nodoReason for indexing this node
/a/b/c/d/e/a/b/c/d/e L'esistenza del nodo e viene valutata nella clausola FLWOR.The existence of node e is evaluated in the FLWOR clause.
/a/b/c/d/e/f/a/b/c/d/e/f Il valore del nodo f viene valutato nella clausola FLWOR.The value of node f is evaluated in the FLWOR clause.
/a/b/c/d/e/g/a/b/c/d/e/g L'esistenza del nodo g viene valutata dal metodo exist().The existence of node g is evaluated by the exist() method.

Specifica di hint di ottimizzazione Specifying Optimization Hints

È possibile utilizzare hint di ottimizzazione facoltativi per specificare ulteriori dettagli sul mapping per un nodo indicizzato da un indice XML selettivo.You can use optional optimization hints to specify additional mapping details for a node indexed by a selective XML index. È ad esempio possibile specificare il tipo di dati e la cardinalità del nodo, nonché determinate informazioni sulla struttura dei dati.For example, you can specify the data type and cardinality of the node, and certain information about the structure of the data. Queste informazioni aggiuntive garantiscono un mapping più efficiente,This additional information supports better mapping. oltre a determinare miglioramenti nelle prestazioni o risparmi in termini di archiviazione, se non entrambi i casi.It also results in improvements in performance or savings in storage, or both.

L'utilizzo di hint di ottimizzazione è facoltativo.The use of optimization hints is optional. È sempre possibile accettare i mapping predefiniti, affidabili ma non necessariamente in grado di garantire livelli ottimali di prestazioni e archiviazione.You can always accept the default mappings, which are reliable but may not provide optimal performance and storage.

Alcuni hint di ottimizzazione, ad esempio l'hint SINGLETON, introducono vincoli ai dati.Some optimization hints – for example, the SINGLETON hint - introduce constraints over your data. In alcuni casi, potrebbero verificarsi errori se non si rispettano tali vincoli.In some cases, errors may be raised when those constraints are not met.

Vantaggi degli hint di ottimizzazioneBenefits of Optimization Hints

Nella tabella seguente vengono identificati gli hint di ottimizzazione che supportano livelli più efficienti di prestazioni e archiviazione.The following table identifies the optimization hints that support more efficient storage or improved performance.

Hint di ottimizzazioneOptimization hint Archiviazione più efficienteMore efficient storage Miglioramento delle prestazioniImproved performance
node()node() Yes NoNo
SINGLETONSINGLETON NoNo Yes
DATA TYPEDATA TYPE Yes Yes
MAXLENGTHMAXLENGTH Yes Yes

Hint di ottimizzazione e tipi di datiOptimization Hints and Data Types

È possibile indicizzare nodi come tipi di dati XQuery o SQL ServerSQL Server .You can index nodes as XQuery data types or as SQL ServerSQL Server data types. Nella tabella seguente vengono illustrati gli hint di ottimizzazione supportati da ogni tipo di dati.The following table shows which optimization hints are supported with each data type.

Hint di ottimizzazioneOptimization hint Tipi di dati XQueryXQuery data types Tipi di dati SQLSQL data types
node()node() Yes NoNo
SINGLETONSINGLETON Yes Yes
DATA TYPEDATA TYPE Yes NoNo
MAXLENGTHMAXLENGTH Yes NoNo

hint di ottimizzazione node()node() optimization hint

Si applica a: tipi di dati XQueryApplies to: XQuery data types

È possibile utilizzare l'ottimizzazione node() per specificare un nodo il cui valore non è necessario per valutare la query tipica.You can use the node() optimization to specify a node whose value is not required to evaluate the typical query. Questo hint riduce i requisiti di archiviazione se la query tipica deve esclusivamente valutare l'esistenza del nodo.This hint reduces storage requirements when the typical query only has to evaluate the existence of the node. Per impostazione predefinita, un indice XML selettivo archivia il valore per tutti i nodi promossi, ad eccezione dei tipi di nodi complessi.(By default, a selective XML index stores the value for all promoted nodes, except complex node types.)

Si consideri l'esempio descritto di seguito.Consider the following example:

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

Per utilizzare un indice XML selettivo per valutare la query, promuovere i nodi b e c.To use a selective XML index to evaluate this query, promote nodes b and c. Tuttavia, poiché il valore del nodo b non è necessario, è possibile utilizzare l'hint node() con la sintassi seguente:However, since the value of node b is not required, you can use the node() hint with the following syntax:

/a/b/ as node()

Se una query richiede il valore di un nodo indicizzato con l'hint node(), non è possibile utilizzare l'indice XML selettivo.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.

Hint di ottimizzazione SINGLETONSINGLETON optimization hint

Si applica a: tipi di dati XQuery o SQL ServerSQL ServerApplies to: XQuery or SQL ServerSQL Server data types

L'hint di ottimizzazione SINGLETON specifica la cardinalità di un nodo.The SINGLETON optimization hint specifies the cardinality of a node. Questo hint migliora le prestazioni delle query, poiché è risaputo che un nodo viene visualizzato al massimo una volta nel relativo elemento padre o predecessore.This hint improves query performance since it is known in advance that a node appears at most one time within its parent or ancestor.

Si consideri il documento XML di esempio in questo argomento.Consider the sample XML document in this topic.

Per utilizzare un indice XML selettivo per eseguire una query sul documento, è possibile specificare l'hint SINGLETON per il nodo d , poiché viene visualizzato al massimo una volta all'interno del relativo padre.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.

Se è stato specificato l'hint SINGLETON ma un nodo viene visualizzato più di una volta nell'elemento padre o predecessore, viene generato un errore in fase di creazione dell'indice (per i dati esistenti) oppure in fase di esecuzione di una query (per i nuovi dati).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).

Hint di ottimizzazione DATA TYPEDATA TYPE optimization hint

Si applica a: tipi di dati XQueryApplies to: XQuery data types

L'hint di ottimizzazione DATA TYPE consente di specificare un tipo di dati XQuery o SQL ServerSQL Server per il nodo indicizzato.The DATA TYPE optimization hint lets you specify an XQuery or a SQL ServerSQL Server data type for the indexed node. Il tipo di dati viene utilizzato per la colonna nella tabella dati dell'indice XML selettivo che corrisponde al nodo indicizzato.The data type is used for the column in the data table of the selective XML index that corresponds to the indexed node.

Se l'esecuzione del cast di un valore esistente al tipo di dati specificato ha esito negativo, l'operazione di inserimento (nell'indice) ha esito positivo, ma viene inserito un valore Null nella tabella dati dell'indice.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.

Hint di ottimizzazione MAXLENGTHMAXLENGTH optimization hint

Si applica a: tipi di dati XQueryApplies to: XQuery data types

L'hint di ottimizzazione MAXLENGTH consente di limitare la lunghezza dei dati di tipo xs:string.The MAXLENGTH optimization hint lets you limit the length of xs:string data. MAXLENGTH non è rilevante per i tipi di dati SQL ServerSQL Server , poiché la lunghezza viene specificata contestualmente ai tipi di dati VARCHAR o NVARCHAR.MAXLENGTH is not relevant for SQL ServerSQL Server data types since you specify the length when you specify the VARCHAR or NVARCHAR date types.

Se una stringa esistente è maggiore del valore MAXLENGTH specificato, l'inserimento di tale valore nell'indice ha esito negativo.When an existing string is longer than the specified MAXLENGTH, then inserting that value into the index fails.

Documento XML di esempio Sample XML Document for Examples

Negli esempi in questo argomento viene fatto riferimento al documento XML di esempio indicato di seguito: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>  

Vedere ancheSee Also

Indici XML selettivi (SXI) Selective XML Indexes (SXI)
Creare, modificare o eliminare indici XML selettivi Create, Alter, and Drop Selective XML Indexes