Indici su colonne con tipo di dati XML

È possibile creare indici XML sulle colonne con tipo di dati xml. Tutti i tag, i valori e i percorsi delle istanze XML presenti nella colonna vengono indicizzati, migliorando le prestazioni delle query. Per le applicazioni in uso l'utilizzo di un indice XML può risultare vantaggioso nelle situazioni seguenti:

  • Le query sulle colonne XML sono frequenti nel carico di lavoro. È necessario tenere in considerazione il costo di manutenzione dell'indice XML durante la modifica dei dati.

  • I valori XML sono di grandi dimensioni mentre le parti recuperate sono relativamente piccole. Creando un indice sarà possibile evitare l'analisi completa dei dati in fase di esecuzione ed eseguire ricerche basate sull'indice per una efficiente elaborazione delle query.

Gli indici XML rientrano nelle categorie seguenti:

  • Indice XML primario

  • Indice XML secondario

Il primo indice nella colonna di tipo xml deve essere l'indice XML primario, il cui utilizzo consente di supportare i tipi di indici secondari seguenti: PATH, VALUE e PROPERTY. In base al tipo di query, questi indici secondari possono facilitare il miglioramento delle prestazioni delle query.

Nota

Non è possibile creare o modificare un indice XML a meno che le opzioni del database siano correttamente impostate per l'utilizzo del tipo di dati xml. Per ulteriori informazioni, vedere Indice full-text su una colonna XML.

Le istanze XML vengono archiviate nelle colonne di tipo xml come oggetti BLOB (Binary Large Object). Tali istanze XML possono essere di grandi dimensioni e la rappresentazione binaria archiviata delle istanze del tipo di dati xml può raggiungere dimensioni massime di 2 GB. Senza un indice, questi oggetti BLOB vengono suddivisi in fase di esecuzione per valutare una query. Questa suddivisione può richiedere molto tempo. Si consideri ad esempio la query seguente:

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

Per selezionare le istanze XML che soddisfano la condizione della clausola WHERE, gli oggetti BLOB XML in ogni riga della tabella Production.ProductModel vengono suddivisi in fase di esecuzione. In seguito, viene valutata l'espressione (/PD:ProductDescription/@ProductModelID[.="19"]) nel metodo exist(). La suddivisione in fase di esecuzione può essere costosa, a seconda delle dimensioni e del numero di istanze archiviate nella colonna.

Se l'esecuzione di query sugli oggetti BLOB XML è un processo comune nell'ambiente di lavoro specifico, può facilitare l'indicizzazione delle colonne di tipo xml. Tuttavia, la manutenzione dell'indice durante la modifica dei dati presuppone un costo associato.

Contenuto della sezione

Argomento

Descrizione

Indice XML primario

Descrive l'indice XML primario e le relative righe.

Indici XML secondari

Descrive i tre tipi di indici XML secondari.

Creazione di indici XML

Descrive come creare indici primari e secondari.

Modifica degli indici XML

Descrive come utilizzare l'istruzione ALTER INDEX per modificare gli indici XML.

Eliminazione di indici XML

Descrive come utilizzare l'istruzione DROP INDEX per eliminare gli indici.

Indice full-text su una colonna XML

Descrive come creare un indice full-text sulle colonne XML.