Indici XML selettiviSelective XML Indexes (SXI)

Gli indici XML selettivi rappresentano un altro tipo di indice XML disponibile oltre agli indici XML comuni.Selective XML indexes are another type of XML index that is available to you in addition to ordinary XML indexes. Di seguito sono indicati gli obiettivi della funzionalità degli indici XML selettivi.The goals of the selective XML index feature are the following:

  • Migliorare le prestazioni delle query sui dati XML archiviati in SQL ServerSQL Server.To improve the performance of queries over XML data stored in SQL ServerSQL Server.

  • Supportare un'indicizzazione più rapida di carichi di lavoro di dati XML di grandi dimensioni.To support faster indexing of large XML data workloads.

  • Migliorare la scalabilità riducendo i costi di archiviazione degli indici XML.To improve scalability by reducing the storage costs of XML indexes.

    La limitazione principale negli indici XML più comuni è rappresentata dal fatto che viene eseguita l'indicizzazione dell'intero documento XML.The main limitation with ordinary XML indexes is that they index the entire XML document. Questa condizione determina significativi svantaggi, tra cui prestazioni ridotte per le query e costi di manutenzione dell'indice più elevati, in particolar modo per quanto riguarda i costi di archiviazione.This leads to several significant drawbacks, such as decreased query performance and increased index maintenance cost, mostly related to the storage costs of the index.

    La funzionalità degli indici XML selettivi consente di promuovere solo determinati percorsi dai documenti XML da indicizzare.The selective XML index feature lets you promote only certain paths from the XML documents to index. In fase di creazione dell'indice, questi percorsi vengono sottoposti a valutazione e i nodi a cui puntano vengono suddivisi e archiviati in una tabella relazionale in SQL ServerSQL Server.At index creation time, these paths are evaluated, and the nodes that they point to are shredded and stored inside a relational table in SQL ServerSQL Server. In questa funzionalità viene utilizzato un efficiente algoritmo di mapping sviluppato da MicrosoftMicrosoft Research in collaborazione con il team di prodotto SQL ServerSQL Server .This feature uses an efficient mapping algorithm developed by MicrosoftMicrosoft Research in collaboration with the SQL ServerSQL Server product team. Con questo algoritmo i nodi XML vengono mappati a una singola tabella relazionale, garantendo prestazioni eccezionali senza richiedere uno spazio di archiviazione di dimensioni eccessive.This algorithm maps the XML nodes to a single relational table, and achieves exceptional performance while requiring only modest storage space.

    La funzionalità degli indici XML selettivi supporta inoltre indici XML selettivi secondari nei nodi indicizzati da un indice XML selettivo.The selective XML index feature also supports secondary selective XML indexes over nodes that have been indexed by a selective XML index. Questi indici selettivi secondari risultano particolarmente efficaci e implicano un miglioramento delle prestazioni delle query.These secondary selective indexes are efficient and further improve the performance of queries.

Vantaggi degli indici XML selettivi Benefits of Selective XML Indexes

Di seguito sono indicati i vantaggi offerti dagli indici XML selettivi.Selective XML indexes provide the following benefits:

  1. Prestazioni delle query notevolmente migliorate sul tipo di dati XML per carichi di query tipici.Greatly improved query performance over the XML data type for typical query loads.

  2. Requisiti di archiviazione ridotti rispetto agli indici XML comuni.Reduced storage requirements compared to ordinary XML indexes.

  3. Costi di manutenzione dell'indice ridotti rispetto agli indici XML comuni.Reduced index maintenance costs compared to ordinary XML indexes.

  4. Nessuna necessità di aggiornare le applicazioni per ricavare vantaggi dagli indici XML selettivi.No need to update applications to benefit from selective XML indexes.

Indici XML selettivi e indici XML primari Selective XML Indexes and Primary XML Indexes

Importante

Creare un indice XML selettivo anziché un indice XML comune nella maggior parte dei casi per migliorare le prestazioni e usufruire di uno spazio di archiviazione più efficiente.Create a selective XML index instead of an ordinary XML index in most cases for better performance and more efficient storage.

Non è tuttavia consigliabile creare un indice XML selettivo in presenza di una delle condizioni indicate di seguito.However, a selective XML index is not recommended when either of the following conditions is true:

  • Viene eseguito il mapping di un numero elevato di percorsi del nodo.You map a large number of node paths.

  • Vengono supportate le query per elementi sconosciuti o in una posizione sconosciuta nella struttura del documento.You support queries for unknown elements or elements in an unknown location in the document structure.

Semplice esempio di un indice XML selettivo Simple Example of a Selective XML Index

Considerare il frammento XML indicato di seguito come un documento XML in una tabella di circa 500.000 righe:Consider the following XML fragment as an XML document in a table of approximately 500,000 rows:

<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>  

Creare un indice XML primario per un numero così elevato di righe in questo semplice schema richiede molto tempo.Creating a primary XML index over so many rows of this simple schema takes a long time. L'esecuzione di query su questi dati risente inoltre del fatto che un indice XML primario non supporta l'indicizzazione selettiva.Querying this data also suffers from the fact that a primary XML index does not support selective indexing.

Se è necessario esclusivamente eseguire una query su questi dati per il percorso /book/title e il percorso /book/subjects , è possibile creare l'indice XML selettivo seguente:If you only need to query this data over the /book/title path and the /book/subjects path, you can create the following selective XML index:

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)  
)  

L'istruzione precedente rappresenta un esempio calzante della sintassi CREATE utilizzata per la creazione di un indice XML selettivo.The preceding statement is a good example of the CREATE syntax that you use when you create a selective XML index. Nell'istruzione CREATE è necessario in primo luogo fornire un nome per l'indice e identificare la tabella e la colonna XML da indicizzare.In the CREATE statement, first you provide a name for the index and identify the table and the XML column to index. È quindi necessario specificare i percorsi per l'indice.Then you provide the paths to index. Un percorso include tre parti:A path has three parts:

  1. Un nome che identifica in modo univoco il percorso.A name that uniquely identifies the path.

  2. Un'espressione XQuery che descrive il percorso.An XQuery expression that describes the path.

  3. Hint di ottimizzazione facoltativi.Optional optimization hints.

    Per ulteriori informazioni su questi elementi, vedere Attività correlate.For more information about these elements, see Related Tasks.

Funzionalità supportate, prerequisiti e limitazioniSupported Features, Prerequisites, and Limitations

Funzionalità XML supportate Supported XML Features

Gli indici XML selettivi supportano l'espressione XQuery, a sua volta supportata da SQL ServerSQL Server nei metodi exist(), value() e nodes().Selective XML indexes support the XQuery supported by SQL ServerSQL Server inside the exist(), value() and nodes() methods.

  • Per i metodi exist(), value() e nodes(), gli indici XML selettivi contengono informazioni sufficienti a trasformare l'intera espressione.For the exist(), value() and nodes() methods, selective XML indexes contain enough information to transform the entire expression.

  • Per i metodi query() e modify(), gli indici XML selettivi possono essere utilizzati esclusivamente per il filtraggio dei nodi.For the query() and modify() methods, selective XML indexes may be used for node filtering only.

  • Per il metodo query(), gli indici XML selettivi non vengono utilizzati per recuperare i risultati.For the query() method, selective XML indexes are not used to retrieve results.

  • Per il metodo modify(), gli indici XML selettivi non vengono utilizzati per aggiornare i documenti XML.For the modify() method, selective XML indexes are not used to update XML documents.

Funzionalità XML non supportate Unsupported XML Features

Gli indici XML selettivi non supportano le seguenti funzionalità supportate nell'implementazione SQL ServerSQL Server di XML:Selective XML indexes do not support the following features that are supported in the SQL ServerSQL Server implementation of XML:

  • Indicizzazione dei nodi con tipi XS complessi: tipi unione, tipi sequenza e tipi elenco.Indexing of nodes with complex XS types: union types, sequence types, and list types.

  • Indicizzazione di nodi con tipi XS binari: ad esempio, base64Binary e hexBinary.Indexing of nodes with binary XS types: for example, base64Binary and hexBinary.

  • Specifica dei nodi da indicizzare con espressioni XPath contenenti il carattere jolly * come elemento finale: ad esempio, /a/b/c/*, /a//b/*o /a/b/*:c.Specifying the nodes to index with XPath expressions that contain the wildcard character * at the end: For example, /a/b/c/*, /a//b/*, or /a/b/*:c.

  • Indicizzazione di un asse diverso da figlio, attributo o discendente.Indexing any axis other than child, attribute, or descendant. Il case //<step> è consentito come case speciale.The //<step> case is allowed as a special case.

  • Indicizzazione di istruzioni di elaborazione XML e commenti.Indexing of XML processing instructions and comments.

  • Specifica e recupero dell'identificatore di un nodo mediante la funzione id().Specifying and retrieving the identifier for a node by using the id() function.

Prerequisiti Prerequisites

Sono necessari i prerequisiti indicati di seguito per poter creare un indice XML selettivo per una colonna XML in una tabella utente:The following prerequisites must exist before you can create a selective XML index over an XML column in a user table:

  • È necessario che esista un indice cluster sulla chiave primaria della tabella utente.A clustered index must exist on the primary key of the user table.

  • La chiave primaria della tabella utente è limitata a una dimensione di 128 byte quando viene utilizzata con gli indici XML selettivi.The primary key of the user table is limited to a size of 128 bytes when used with selective XML indexes.

  • La chiave di clustering della tabella utente è limitata a 15 colonne quando viene utilizzata con gli indici XML selettivi.The clustering key of the user table is limited to 15 columns when used with selective XML indexes.

Limitazioni Limitations

Requisiti e limitazioni generaliGeneral requirements and limitations

  • Ogni indice XML selettivo deve necessariamente essere creato su una singola colonna XML.Each selective XML index can only be created on a single XML column.

  • Non è possibile creare un indice XML selettivo su una colonna non di tipo XML.You cannot create a selective XML index on a non-XML column.

  • Ogni colonna XML in una tabella può includere solo un indice XML selettivo.Each XML column in a table can have only one selective XML index.

  • Per ogni tabella è possibile creare al massimo 249 indici XML selettivi.Each table can have up to 249 selective XML indexes.

    Limitazioni relative a oggetti supportatiLimitations on supported objects

    Non è possibile creare indici XML selettivi per gli oggetti seguenti:You cannot create selective XML indexes on the following objects:

  1. Colonne XML in una vista.XML columns in a view.

  2. Variabile con valori di tabella con colonne XML.Table-valued variable with XML columns.

  3. Variabili di tipo XML.XML type variables.

  4. Colonne XML calcolate.Computed XML columns.

  5. Colonne XML con una profondità superiore a 128 nodi nidificati.XML columns with a depth of more than 128 nested nodes.

    Limitazioni relative all'archiviazioneLimitations related to storage

    Esiste un limite finito al numero di nodi di un documento XML che è possibile aggiungere all'indice.There is a finite limit on the number of nodes from the XML document that can be added to the index. Un indice XML selettivo esegue il mapping di documenti XML a una singola tabella relazionale.A selective XML index maps XML documents to a single relational table. Pertanto non possono essere presenti più di 1.024 colonne non Null in una determinata riga della tabella.Therefore it cannot have more than 1024 non-null columns in any given row of the table. Inoltre, gran parte delle limitazioni delle colonne di tipo sparse vengono applicate anche agli indici XML selettivi, poiché negli indici vengono utilizzate colonne di tipo sparse per l'archiviazione.Furthermore, many of the limitations of sparse columns also apply to selective XML indexes, because the indexes use sparse columns for storage.

    Il numero massimo di colonne non Null supportate in qualsiasi riga specificata dipende dalle dimensioni dei dati nelle colonne:The maximum number of non-null columns supported in any given row depends on the size of the data in the columns:

  • Nel migliore dei casi sono supportate 1024 colonne non Null se tutte le colonne sono di tipo bit.In the best case, 1024 non-null columns are supported when all columns are of type bit.

  • Nel peggiore dei casi sono supportate solo 236 colonne non Null se tutte le colonne sono oggetti di grandi dimensioni di tipo varchar.In the worst case, only 236 non-null columns are supported when all columns are large objects of type varchar.

    Negli indici XML selettivi vengono utilizzate da una a quattro colonne a livello interno per ogni percorso del nodo indicizzato.Selective XML indexes use from one to four columns internally for every node path that is indexed. Il numero totale di nodi che è possibile indicizzare varia da 60 a diverse centinaia, a seconda della dimensione effettiva dei dati nei percorsi indicizzati.The total number of nodes that can be indexed ranges from 60 to several hundred nodes, depending on the actual size of the data in the indexed paths.

  • Nel peggiore dei casi, se qualcuno o tutti i nodi vengono mappati mediante // nella definizione del percorso del nodo, il numero massimo di nodi indicizzati è 60.In the worst case, when some or all nodes are mapped using // in the node path definition, the maximum number of indexed nodes is 60.

  • Nel migliore dei casi, se i nodi vengono mappati senza utilizzare // nella definizione del percorso del nodo, il numero massimo di nodi indicizzati è 200.In the best case, when nodes are mapped without using // in the node path definition, the maximum number of indexed nodes is 200.

    Gli indici XML selettivi vengono ricompilati se si esegue un'istruzione CREATE o ALTER per l'indice.Selective XML indexes are rebuilt when you CREATE or ALTER the index.

    Quando si esegue un'istruzione CREATE o ALTER per un indice XML selettivo, quest'ultimo viene ricompilato in modalità offline a thread singolo.When you CREATE or ALTER a selective XML index, it is rebuilt in a single-threaded, offline mode. Le istruzioni ALTER hanno in genere un impatto negativo sulle prestazioni delle query sui documenti XML indicizzati.Frequently ALTER statements negatively affect the performance of queries over the indexed XML documents.

    Altre limitazioniOther limitations

  • Gli indici XML selettivi non sono supportati negli hint per la query.Selective XML indexes are not supported in query hints.

  • Gli indici XML selettivi e gli indici XML selettivi secondari non sono supportati nell'ottimizzazione guidata motore di database.Selective XML indexes and secondary selective XML indexes are not supported in Database Tuning Advisor.

AttivitàTask ArgomentoTopic
Specificare i percorsi del nodo che si desidera indicizzare e gli hint di ottimizzazione facoltativi quando si crea o si modifica un indice XML selettivo.Specify the node paths that you want to index and optional optimization hints when you create or alter a selective XML index. Specificare percorsi e hint di ottimizzazione per indici XML selettiviSpecify Paths and Optimization Hints for Selective XML Indexes
Creare, modificare o eliminare un indice XML selettivo.Create, alter, or drop a selective XML index. Creare, modificare o eliminare indici XML selettiviCreate, Alter, and Drop Selective XML Indexes
Creare, modificare o eliminare un indice XML selettivo secondario.Create, alter, or drop a secondary selective XML index. Creare, modificare o eliminare indici XML selettivi secondariCreate, Alter, and Drop Secondary Selective XML Indexes