Index XML sélectifs (SXI)

Les index XML sélectifs sont un autre type d'index XML disponible en plus des index XML ordinaires. Les objectifs de la fonctionnalité d'index XML sélectif sont les suivants :

  • Améliorer les performances des requêtes sur les données XML stockées dans SQL Server.

  • Prendre en charge une indexation plus rapide des charges de travail importantes de données XML.

  • Améliorer l'évolutivité en réduisant les coûts de stockage des index XML.

La principale limitation avec des index XML ordinaires est qu'ils indexent le document XML entier. Cela entraîne plusieurs inconvénients significatifs, tels que la réduction des performances des requêtes et la hausee du coût de maintenance de l'index, principalement liés aux coûts de stockage de l'index.

La fonctionnalité d'index XML sélectif vous permet de promouvoir uniquement certains chemins d'accès des documents XML à indexer. Lors de la création d'index, les chemins d'accès sont évalués et les nœuds vers lesquels ils pointent sont fragmentés et stockés dans une table relationnelle dans SQL Server. Cette fonctionnalité utilise un algorithme efficace de mappage développé par Microsoft Research en collaboration avec l'équipe de produit SQL Server. Cet algorithme associe les nœuds XML à une table relationnelle, et permet d'obtenir des performances exceptionnelles tout en exigeant qu'un espace de stockage modeste.

La fonctionnalité d'index XML sélectif prend également en charge les index XML secondaires sélectifs sur les nœuds qui ont été indexés par un index XML sélectif. Ces index sélectifs secondaires sont efficaces et améliorent encore les performances des requêtes.

[!REMARQUE]

Pour créer des index XML sélectifs, vous devez activer votre base de données avec sp_db_selective_xml_index. Pour plus d'informations sur l'activation de votre base de données, consultez sp_db_selective_xml_index.

Dans cette rubrique

  1. Avantages des index XML sélectifs

  2. Index XML sélectifs et index XML primaires sélectifs

  3. Exemple simple d'un index XML sélectif

  4. Fonctionnalités prises en charge, configuration requise et limitations

    1. Fonctionnalités XML prises en charge

    2. Fonctionnalités XML non prises en charge

    3. Configuration requise

    4. Limitations

  5. Tâches associées

Avantages des index XML sélectifs

Les index XML sélectif présentent les avantages suivants :

  1. Les performances des requêtes sont considérablement améliorées sur le type de données XML pour les charges de requête classique.

  2. Capacité de stockage réduite comparée aux index XML ordinaires.

  3. Coûts réduits de maintenance des index par rapport aux index XML ordinaires.

  4. Aucun besoin de mettre à jour des applications pour tirer parti des index XML sélectifs.

[Haut de la page]

Index XML sélectifs et index XML primaires sélectifs

Important

Créez un index XML sélectif au lieu d'un index XML ordinaire dans la plupart des cas pour obtenir de meilleures performances et un stockage plus efficace.

Toutefois, un index XML sélectif n'est pas recommandé lorsque l'une des conditions suivantes est remplie :

  • Vous mappez un grand nombre de chemins d'accès de nœud.

  • Vous devez prendre en charge des requêtes d'éléments inconnus ou des éléments d'un emplacement inconnu dans la structure du document.

[Haut de la page]

Exemple simple d'un index XML sélectif

Examinons le fragment de code XML suivant sous la forme d'un document XML dans une table d'environ 500 000 lignes :

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

La création d'un index XML primaire sur un aussi grand nombre de lignes de ce schéma simple prend beaucoup de temps. L'interrogation de ces données souffre également du fait qu'un index XML primaire ne prend pas en charge l'indexation sélective.

Si vous devez uniquement interroger ces données sur le chemin d'accès /book/title et le chemin d'accès /book/subjects, créez l'index XML sélectif suivant :

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'instruction précédente est un bon exemple de syntaxe CREATE que vous utilisez lorsque vous créez un index XML sélectif. Dans l'instruction CREATE, vous spécifiez d'abord un nom pour l'index et vous identifiez la table et la colonne XML à indexer. Vous spécifiez ensuite les chemins d'accès à indexer. Un chemin d'accès possède trois parties :

  1. Un nom qui identifie de façon unique le chemin d'accès.

  2. Une expression XQuery qui décrit le chemin d'accès.

  3. Des indicateurs d'optimisation facultatifs.

Pour plus d'informations sur ces éléments, consultez Tâches associées.

[Haut de la page]

Fonctionnalités prises en charge, configuration requise et limitations

Fonctionnalités XML prises en charge

Les index XML sélectifs prennent en charge la syntaxe XQuery prise en charge par SQL Server dans les méthodes exist(), value() et nodes().

  • Pour les méthodes exist(), value() et nodes(), les index XML sélectifs contiennent suffisamment d'informations pour convertir l'expression entière.

  • Pour les méthodes query() et modify(), les index XML sélectifs ne peuvent être utilisés que pour le filtrage de nœud.

  • Pour la méthode query(), les index XML sélectifs ne sont pas utilisés pour récupérer les résultats.

  • Pour la méthode modify(), les index XML sélectifs ne sont pas utilisés pour mettre à jour les documents XML.

[Haut de la page]

Fonctionnalités XML non prises en charge

Les index XML sélectifs ne prennent pas en charge les fonctionnalités suivantes qui sont prises en charge dans l'implémentation SQL Server du XML :

  • Indexation des nœuds avec des types complexes XS : types d'unions, types de séquences et types de listes.

  • Indexation des nœuds avec des types de données binaires XS : par exemple, base64Binary et hexBinary.

  • Spécification des nœuds à indexer avec des expressions Xpath qui contiennent le caractère générique * à la fin : par exemple, /a/b/c/*, /a//b/* ou /a/b/*:c.

  • Indexation d'un axe autre que l'enfant, l'attribut ou le descendant. //<step> est autorisé comme un cas particulier.

  • Indexation d'instructions de traitement XML et de commentaires.

  • Spécification et récupération de l'identificateur d'un nœud en utilisant la fonction id().

[Haut de la page]

Configuration requise

Les conditions suivantes doivent être réunies avant de pouvoir créer un index XML sélectif sur une colonne XML dans une table utilisateur :

  • Un index cluster doit exister dans la clé primaire de la table utilisateur.

  • La clé primaire de la table d'utilisateur est limitée à une taille de 128 octets si elle est utilisée avec des index XML sélectifs.

  • La clé de clustering de la table utilisateur est limitée à 15 colonnes si elle est utilisée avec des index XML sélectifs.

[Haut de la page]

Limitations

Limitations et exigences générales

  • Un index XML sélectif peut être créé uniquement sur une seule colonne XML. Vous ne pouvez pas créer un index XML sélectif sur une colonne non-XML. Chaque colonne XML dans une table ne peut posséder qu'un index XML sélectif. Chaque table peut comporter jusqu'à 249 index XML sélectifs.

Limitations des objets pris en charge

Vous ne pouvez pas créer d'index XML sélectifs sur les objets suivants :

  • Colonnes XML dans une vue.

  • Variable table avec des colonnes XML.

  • Variables de type XML.

  • Colonnes XML calculées.

  • Colonnes XML avec une profondeur de plus de 128 nœuds imbriqués.

Limitations relatives au stockage

Il existe une limite finie sur le nombre de nœuds du document XML pouvant être ajoutés à l'index. Un index XML sélectif mappe des documents XML à une table relationnelle. Par conséquent, il ne peut pas y avoir plus de 1 024 colonnes non Null dans une ligne donnée de la table. En outre, la plupart des limitations des colonnes éparses s'appliquent également aux index XML sélectifs, car les index utilisent des colonnes éparses pour le stockage.

Le nombre maximal de colonnes non Null prises en charge dans toute ligne donnée dépend de la taille des données dans les colonnes :

  • Dans le meilleur des cas, 1 024 colonnes non NULL sont prises en charge lorsque toutes les colonnes sont de type bit.

  • Dans le pire des cas, seules 236 colonnes non NULL sont prises en charge lorsque toutes les colonnes sont des objets Blob de type varchar.

Les index XML sélectifs utilisent plusieurs colonnes en interne pour chaque chemin d'accès du nœud qui est indexé. Le nombre total de nœuds qui peuvent être indexés ne peut pas dépasser 50.

Les index XML sélectifs sont régénérés lorsque vous créez (CREATE) ou modifiez (ALTER) l'index.

Lorsque vous créez ou modifiez un index XML sélectif, il est reconstruit en mode hors connexion monothread. L'utilisation fréquente d'instructions ALTER a un impact négatif sur les performances des requêtes exécutées sur des documents XML indexés.

Autres limitations

  • Les index XML sélectifs ne sont pas pris en charge dans les indicateurs de requête.

  • Les index XML sélectifs et les index XML secondaires sélectifs ne sont pas pris en charge par l'Assistant Paramétrage de base de données.

[Haut de la page]

Tâches associées

Tâche

Rubrique

Spécifiez les chemins d'accès du nœud que vous souhaitez indexer et les indicateurs facultatifs d'optimisation lorsque vous créez ou modifiez un index XML sélectif.

Spécifier les chemins d'accès et les indicateurs d'optimisation des index XML sélectifs

Créez, modifiez ou supprimez un index XML sélectif.

Créer, modifier ou supprimer des index XML sélectifs

Créez, modifiez ou supprimez un index XML secondaire sélectif.

Créer, modifier ou supprimer des index XML secondaires sélectifs

[Haut de la page]