Selektive XML-Indizes (SXI)Selective XML Indexes (SXI)

Selektive XML-Indizes sind ein weiterer Typ von XML-Index, der Ihnen zusätzlich zu den herkömmlichen XML-Indizes zur Verfügung steht.Selective XML indexes are another type of XML index that is available to you in addition to ordinary XML indexes. Die Ziele der selektiven XML-Indexfunktion sind Folgende:The goals of the selective XML index feature are the following:

  • Verbessern der Leistung von Abfragen zu XML-Daten, die in SQL ServerSQL Servergespeichert sind.To improve the performance of queries over XML data stored in SQL ServerSQL Server.

  • Unterstützen einer schnelleren Indizierung großer XML-Datenlasten.To support faster indexing of large XML data workloads.

  • Verbessern der Skalierbarkeit durch das Reduzieren der Speicherkosten für XML-Indizes.To improve scalability by reducing the storage costs of XML indexes.

    Die Haupteinschränkung bei herkömmlichen XML-Indizes liegt darin, dass sie das gesamte XML-Dokument indizieren.The main limitation with ordinary XML indexes is that they index the entire XML document. Dies führt zu mehreren bedeutenden Nachteilen, z. B. verringerter Abfrageleistung und höheren Kosten für die Indexwartung, die sich in der Regel auf die Indexspeicherkosten beziehen.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.

    Mit der selektiven XML-Indexfunktion können Sie nur bestimmte Pfade aus den XML-Dokumenten zum Index höherstufen.The selective XML index feature lets you promote only certain paths from the XML documents to index. Bei der Indexerstellung werden diese Pfade ausgewertet, und die Knoten, auf die sie verweisen, werden aufgeteilt und in einer relationalen Tabelle in SQL ServerSQL Servergespeichert.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. Diese Funktion verwendet einen effizienten Zuordnungsalgorithmus, der in Zusammenarbeit mit dem MicrosoftMicrosoft -Produktteam von SQL ServerSQL Server Research entwickelt wurde.This feature uses an efficient mapping algorithm developed by MicrosoftMicrosoft Research in collaboration with the SQL ServerSQL Server product team. Dieser Algorithmus ordnet die XML-Knoten einer einzelnen relationalen Tabelle zu und erzielt eine herausragende Leistung bei sehr geringem Speicherbedarf.This algorithm maps the XML nodes to a single relational table, and achieves exceptional performance while requiring only modest storage space.

    Die selektive XML-Indexfunktion unterstützt auch sekundäre selektive XML-Indizes für Knoten, die von einem selektiven XML-Index indiziert wurden.The selective XML index feature also supports secondary selective XML indexes over nodes that have been indexed by a selective XML index. Diese sekundären selektiven Indizes sind effizient und verbessern die Leistung von Abfragen noch weiter.These secondary selective indexes are efficient and further improve the performance of queries.

Vorteile selektiver XML-Indizes Benefits of Selective XML Indexes

Selektive XML-Indizes bieten die folgenden Vorteile:Selective XML indexes provide the following benefits:

  1. Deutlich verbesserte Abfrageleistung für den XML-Datentyp bei typische Abfragelasten.Greatly improved query performance over the XML data type for typical query loads.

  2. Im Vergleich zu herkömmlichen XML-Indizes reduzierte Speicheranforderungen.Reduced storage requirements compared to ordinary XML indexes.

  3. Im Vergleich zu herkömmlichen XML-Indizes reduzierte Indexwartungskosten.Reduced index maintenance costs compared to ordinary XML indexes.

  4. Anwendungen müssen nicht aktualisiert werden, um die Vorteile selektiver XML-Indizes nutzen zu können.No need to update applications to benefit from selective XML indexes.

Selektive XML-Indizes und primäre XML-Indizes Selective XML Indexes and Primary XML Indexes

Wichtig

Im Hinblick auf eine bessere Leistung und einen effizienteren Speicher erstellen Sie in den meisten Fällen einen selektiven XML-Index anstatt eines gewöhnlichen XML-Indexes.Create a selective XML index instead of an ordinary XML index in most cases for better performance and more efficient storage.

Ein selektiver XML-Index wird jedoch nicht empfohlen, wenn eine der beiden folgenden Bedingungen zutrifft:However, a selective XML index is not recommended when either of the following conditions is true:

  • Sie ordnen eine große Anzahl von Knotenpfaden zu.You map a large number of node paths.

  • Sie unterstützen Abfragen für unbekannte Elemente oder Elemente in einer unbekannten Position in der Dokumentstruktur.You support queries for unknown elements or elements in an unknown location in the document structure.

Einfaches Beispiel für einen selektiven XML-Index Simple Example of a Selective XML Index

Betrachten Sie das folgende XML-Fragment, das ein XML-Dokument in einer Tabelle mit ungefähr 500.000 Zeilen darstellt: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>  

Die Erstellung eines primären XML-Index über so viele Zeilen dieses einfachen Schemas hinweg dauert sehr lange.Creating a primary XML index over so many rows of this simple schema takes a long time. Die Abfrage dieser Daten wird zusätzlich noch dadurch erschwert, dass ein primärer XML-Index keine selektive Indizierung unterstützt.Querying this data also suffers from the fact that a primary XML index does not support selective indexing.

Wenn Sie diese Daten nur über den /book/title -Pfad und den /book/subjects -Pfad abfragen müssen, können Sie den folgenden selektiven XML-Index erstellen: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)  
)  

Die vorangehende Anweisung ist ein gutes Beispiel für die CREATE-Syntax, die Sie zum Erstellen eines selektiven XML-Index verwenden.The preceding statement is a good example of the CREATE syntax that you use when you create a selective XML index. Sie geben in der CREATE-Anweisung zuerst einen Namen für den Index an und identifizieren die Tabelle und die XML-Spalte, die Sie indizieren möchten.In the CREATE statement, first you provide a name for the index and identify the table and the XML column to index. Anschließend stellen Sie die zu indizierende Pfade bereit.Then you provide the paths to index. Ein Pfad besteht aus drei Teilen:A path has three parts:

  1. Einem Namen, der den Pfad eindeutig angibt.A name that uniquely identifies the path.

  2. Einem XQuery-Ausdruck, der den Pfad beschreibt.An XQuery expression that describes the path.

  3. Optionalen Optimierungshinweise.Optional optimization hints.

    Weitere Informationen zu diesen Elementen finden Sie unter Verwandte Aufgaben.For more information about these elements, see Related Tasks.

Unterstützte Funktionen, Voraussetzungen und EinschränkungenSupported Features, Prerequisites, and Limitations

Unterstützte XML-Funktionen Supported XML Features

Selektive XML-Indizes unterstützen die XQuery, die von SQL ServerSQL Server in den exist()-, value()- und nodes()-Methoden unterstützt werden.Selective XML indexes support the XQuery supported by SQL ServerSQL Server inside the exist(), value() and nodes() methods.

  • Für die exist()-, value()- und nodes()-Methoden enthalten selektive XML-Indizes ausreichende Informationen, um den gesamten Ausdruck zu transformieren.For the exist(), value() and nodes() methods, selective XML indexes contain enough information to transform the entire expression.

  • Für die query()- und modify()-Methoden können selektive XML-Indizes möglicherweise nur zum Filtern von Knoten verwendet werden.For the query() and modify() methods, selective XML indexes may be used for node filtering only.

  • Für die query()-Methode werden selektive XML-Indizes nicht zum Abrufen von Ergebnissen verwendet.For the query() method, selective XML indexes are not used to retrieve results.

  • Für die modify()-Methode werden selektive XML-Indizes nicht zum Aktualisieren von XML-Dokumenten verwendet.For the modify() method, selective XML indexes are not used to update XML documents.

Nicht unterstützte XML-Funktionen Unsupported XML Features

Selektive XML-Indizes unterstützen nicht die folgenden Funktionen, die in der SQL ServerSQL Server -Implementierung von XML unterstützt werden:Selective XML indexes do not support the following features that are supported in the SQL ServerSQL Server implementation of XML:

  • Indizieren von Knoten mit komplexen XS-Typen: Union-Typen, Sequenztypen, und Listtypen.Indexing of nodes with complex XS types: union types, sequence types, and list types.

  • Indizieren von Knoten mit binären XS-Typen: z. B. base64Binary und hexBinary.Indexing of nodes with binary XS types: for example, base64Binary and hexBinary.

  • Angeben von Knoten, die mit XPath-Ausdrücken indiziert werden sollen und am Ende das Platzhalterzeichen * aufweisen: z. B. /a/b/c/*, /a//b/*oder /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.

  • Indizieren einer anderen Achse als untergeordnetes Element, Attribut oder Nachfolger.Indexing any axis other than child, attribute, or descendant. Der //<step> -Fall ist als spezieller Fall zulässig.The //<step> case is allowed as a special case.

  • Indizieren von XML-Verarbeitungsanweisungen und -Kommentaren.Indexing of XML processing instructions and comments.

  • Angeben und Abrufen des Bezeichners für einen Knoten mit der id()-Funktion.Specifying and retrieving the identifier for a node by using the id() function.

Erforderliche Komponenten Prerequisites

Die folgenden Voraussetzungen müssen erfüllt sein, bevor Sie einen selektiven XML-Index für eine XML-Spalte in einer Benutzertabelle erstellen können:The following prerequisites must exist before you can create a selective XML index over an XML column in a user table:

  • Für den Primärschlüssel der Benutzertabelle muss ein gruppierter Index vorhanden sein.A clustered index must exist on the primary key of the user table.

  • Der Primärschlüssel der Benutzertabelle ist auf eine Größe von 128 Byte beschränkt, wenn er zusammen mit selektiven XML-Indizes verwendet wird.The primary key of the user table is limited to a size of 128 bytes when used with selective XML indexes.

  • Der Gruppierungsschlüssel der Benutzertabelle ist auf 15 Spalten beschränkt, wenn er zusammen mit selektiven XML-Indizes verwendet wird.The clustering key of the user table is limited to 15 columns when used with selective XML indexes.

Einschränkungen Limitations

Allgemeine Anforderungen und EinschränkungenGeneral requirements and limitations

  • Jeder selektive XML-Index kann nur für eine einzige XML-Spalte erstellt werden.Each selective XML index can only be created on a single XML column.

  • Für eine Spalte, die keine XML-Spalte ist, kann kein selektiver XML-Index erstellt werden.You cannot create a selective XML index on a non-XML column.

  • Jede XML-Spalte in einer Tabelle kann nur über einen selektiven XML-Index verfügen.Each XML column in a table can have only one selective XML index.

  • Jede Tabelle kann bis zu 249 selektive XML-Indizes enthalten.Each table can have up to 249 selective XML indexes.

    Einschränkungen für unterstützte ObjekteLimitations on supported objects

    Für die folgenden Objekte können keine selektiven XML-Indizes erstellt werden:You cannot create selective XML indexes on the following objects:

  1. XML-Spalten in einer Sicht.XML columns in a view.

  2. Tabellenwertvariable mit XML-Spalten.Table-valued variable with XML columns.

  3. XML-Typvariablen.XML type variables.

  4. Berechnete XML Spalten.Computed XML columns.

  5. XML-Spalten mit einer Tiefe von mehr als 128 geschachtelten Knoten.XML columns with a depth of more than 128 nested nodes.

    Auf Speicher bezogene EinschränkungenLimitations related to storage

    Die Anzahl der Knoten aus dem XML-Dokument, die dem Index hinzugefügt werden können, ist beschränkt.There is a finite limit on the number of nodes from the XML document that can be added to the index. Ein selektiver XML-Index ordnet XML-Dokumente einer einzelnen relationalen Tabelle zu.A selective XML index maps XML documents to a single relational table. Daher kann er nicht mehr als 1024 Spalten mit Nicht-NULL-Werten in den Spalten der Tabelle aufweisen.Therefore it cannot have more than 1024 non-null columns in any given row of the table. Weiterhin gelten viele der Einschränkungen von Spalten mit geringer Dichte auch für selektive XML-Indizes, da die Indizes Spalten mit geringer Dichte zum Speichern verwenden.Furthermore, many of the limitations of sparse columns also apply to selective XML indexes, because the indexes use sparse columns for storage.

    Die maximale Anzahl von Nicht-NULL-Spalten, die in einer Zeile unterstützt werden, hängt von der Größe der Daten in den Spalten ab:The maximum number of non-null columns supported in any given row depends on the size of the data in the columns:

  • Im besten Fall werden 1024 Nicht-NULL-Spalten unterstützt, wenn alle Spalten den Typ bithaben.In the best case, 1024 non-null columns are supported when all columns are of type bit.

  • Im schlimmsten Fall werden nur 236 Nicht-NULL-Spalten unterstützt, wenn alle Spalten große Objekte des Typs varcharsind.In the worst case, only 236 non-null columns are supported when all columns are large objects of type varchar.

    Selektive XML-Indizes verwenden intern ein bis vier Spalten für jeden Knotenpfad, der indiziert wird.Selective XML indexes use from one to four columns internally for every node path that is indexed. Die Gesamtzahl der Knoten, die indizierte werden können, reicht von 60 bis zu mehreren hundert Knoten, abhängig von der tatsächlichen Größe der Daten in den indizierten Pfaden.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.

  • Im schlimmsten Fall, wenn einige oder alle Knoten in der Knotenpfaddefinition mit // zugeordnet sind, beträgt die maximale Anzahl indizierter Knoten 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.

  • Im besten Fall, wenn Knoten ohne // in der Knotenpfaddefinition zugeordnet werden, beträgt die maximale Anzahl indizierter Knoten 200.In the best case, when nodes are mapped without using // in the node path definition, the maximum number of indexed nodes is 200.

    Selektive XML-Indizes werden neu erstellt, wenn Sie CREATE oder ALTER für den Index ausführen.Selective XML indexes are rebuilt when you CREATE or ALTER the index.

    Wenn Sie einen selektiven XML-Index erstellen (CREATE) oder ändern (ALTER), wird er im Singlethread-Offlinemodus neu erstellt.When you CREATE or ALTER a selective XML index, it is rebuilt in a single-threaded, offline mode. Die häufige Verwendung von ALTER-Anweisungen wirkt sich negativ auf die Leistung von Abfragen für die XML-Dokumente aus.Frequently ALTER statements negatively affect the performance of queries over the indexed XML documents.

    Weitere EinschränkungenOther limitations

  • Selektive XML-Indizes werden nicht in Abfragehinweisen unterstützt.Selective XML indexes are not supported in query hints.

  • Selektive XML-Indizes und sekundäre selektive XML-Indizes werden nicht vom Datenbankoptimierungsratgeber unterstützt.Selective XML indexes and secondary selective XML indexes are not supported in Database Tuning Advisor.

TaskTask ThemaTopic
Angeben der zu indizierenden Knotenpfade und optionalen Optimierungshinweise, wenn Sie einen selektiven XML-Index erstellen oder ändern.Specify the node paths that you want to index and optional optimization hints when you create or alter a selective XML index. Angeben von Pfaden und Optimierungshinweisen für selektive XML-IndizesSpecify Paths and Optimization Hints for Selective XML Indexes
Erstellen, Ändern oder Löschen eines selektiven XML-Indexes.Create, alter, or drop a selective XML index. Erstellen, Ändern und Löschen selektiver XML-IndizesCreate, Alter, and Drop Selective XML Indexes
Erstellen, Ändern oder Löschen eines sekundären selektiven XML-Indexes.Create, alter, or drop a secondary selective XML index. Erstellen, Ändern und Löschen sekundärer, selektiver XML-IndizesCreate, Alter, and Drop Secondary Selective XML Indexes