CREATE XML INDEX (Transact-SQL)

Anwendungsbereich:yesSQL Server (alle unterstützten Versionen) YesAzure SQL-Datenbank

Erstellt einen XML-Index für eine angegebene Tabelle. Ein Index kann erstellt werden, bevor Daten in der Tabelle enthalten sind. XML-Indizes können für Tabellen in einer anderen Datenbank durch Angabe eines gekennzeichneten Datenbanknamens erstellt werden.

Hinweis

Informationen zum Erstellen eines relationalen Indexes finden Sie unter CREATE INDEX (Transact-SQL). Informationen zum Erstellen eines räumlichen Indexes finden Sie unter CREATE SPATIAL INDEX (Transact-SQL).

Topic link iconTransact-SQL-Syntaxkonventionen

Syntax

--Create XML Index   
CREATE [ PRIMARY ] XML INDEX index_name
    ON <object> ( xml_column_name )
    [ USING XML INDEX xml_index_name
        [ FOR { VALUE | PATH | PROPERTY } ] ]
    [ WITH ( <xml_index_option> [ ,...n ] ) ]
[ ; ]

<object> ::=
{ database_name.schema_name.table_name | schema_name.table_name | table_name }

<xml_index_option> ::=
{
    PAD_INDEX  = { ON | OFF }
  | FILLFACTOR = fillfactor
  | SORT_IN_TEMPDB = { ON | OFF }
  | IGNORE_DUP_KEY = OFF
  | DROP_EXISTING = { ON | OFF }
  | ONLINE = OFF
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | XML_COMPRESSION = { ON | OFF }
}

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

[PRIMARY] XML

Erstellt einen XML-Index für die angegebene xml-Spalte. Wenn PRIMARY angegeben ist, wird ein gruppierter Index mit dem gruppierten Schlüssel erstellt, der aus dem Gruppierungsschlüssel der Benutzertabelle und dem Bezeichner für einen XML-Knoten besteht. Jede Tabelle kann bis zu 249 XML-Indizes enthalten. Beachten Sie beim Erstellen eines XML-Indexes Folgendes:

  • Für den Primärschlüssel der Benutzertabelle muss ein gruppierter Index vorhanden sein.

  • Der Gruppierungsschlüssel der Benutzertabelle ist auf 15 Spalten begrenzt.

  • Für jede xml-Spalte in einer Tabelle können ein primärer XML-Index und mehrere sekundäre XML-Indizes vorhanden sein.

  • Für eine xml-Spalte muss ein primärer XML-Index vorhanden sein, bevor ein sekundärer XML-Index für die Spalte erstellt werden kann.

  • Ein XML-Index kann nur für eine einzige xml-Spalte erstellt werden. Sie können keinen XML-Index für eine Nicht-xml-Spalte erstellen. Außerdem können Sie keinen relationalen Index für eine xml-Spalte erstellen.

  • Sie können weder einen primären noch einen sekundären XML-Index für eine xml-Spalte in einer Sicht, für eine Tabellenwertvariable mit xml-Spalten oder für Variablen des Typs xml erstellen.

  • Sie können keinen primären XML-Index für eine berechnete xml-Spalte erstellen.

  • Die SET-Optionseinstellungen müssen mit den Einstellungen übereinstimmen, die für indizierte Sichten und berechnete Spaltenindizes erforderlich sind. Insbesondere muss die Option ARITHABORT auf ON festgelegt sein, wenn ein XML-Index erstellt und Werte in der xml-Spalte eingefügt, gelöscht oder aktualisiert werden.

Weitere Informationen finden Sie unter XML-Indizes (SQL Server).

index_name

Der Name des Index. Indexnamen müssen innerhalb einer Tabelle eindeutig sein, können aber innerhalb einer Datenbank mehrfach vorkommen. Indexnamen müssen den Regeln für Bezeichner entsprechen.

Primäre XML-Indexnamen dürfen nicht mit den folgenden Zeichen beginnen: #, ##, @ oder @@.

xml_column_name

Die xml-Spalte, auf der der Index basiert. Für eine einzige XML-Indexdefinition kann nur eine xml-Spalte angegeben werden. Allerdings können für eine xml-Spalte mehrere sekundäre XML-Indizes erstellt werden.

USING XML INDEX xml_index_name

Gibt den primären XML-Index an, der beim Erstellen eines sekundären XML-Indexes verwendet werden soll.

FOR { VALUE | PATH | PROPERTY }

Gibt den Typ des sekundären XML-Indexes an.

VALUE
Erstellt einen sekundären XML-Index für Spalten, bei denen die Schlüsselspalten (Knotenwert und Pfad) vom primären XML-Index stammen.

PATH
Erstellt einen sekundären XML-Index für Spalten, die auf Pfad- und Knotenwerten im primären XML-Index basieren. Im sekundären Index von PATH handelt es sich bei den Pfad- und Knotenwerten um Schlüsselspalten, die ein effizientes Suchen nach Pfaden ermöglichen.

PROPERTY
Erstellt einen sekundären XML-Index für Spalten (PS, Pfad und Knotenwert) des primären XML-Indexes. Dabei steht PS für den Primärschlüssel der Basistabelle.

<object>::=

Das vollqualifizierte oder nicht vollqualifizierte Objekt, das indiziert werden soll.

database_name
Der Name der Datenbank.

schema_name
Der Name des Schemas, zu dem die Tabelle gehört.

table_name
Der Name der Tabelle, die indiziert werden soll.

<xml_index_option> ::=

Gibt die Optionen an, die beim Erstellen des Indexes verwendet werden sollen.

PAD_INDEX = { ON | OFF }

Gibt die Auffüllung von Indizes an. Der Standardwert ist OFF.

EIN
Der Prozentsatz des mit fillfactor angegebenen freien Speicherplatzes wird für die Zwischenebenenseiten des Indexes angewendet.

OFF oder fillfactor ist nicht angegeben.
Die Zwischenebenenseiten sind nahezu vollständig aufgefüllt. Allerdings ist ausreichend Speicherplatz vorhanden, um mindestens eine Zeile in der maximal für den Index möglichen Größe aufzunehmen, wenn der Schlüsselsatz auf den Zwischenseiten berücksichtigt wird.

Die Option PAD_INDEX ist nur dann hilfreich, wenn FILLFACTOR angegeben ist, da PAD_INDEX den durch FILLFACTOR angegebenen Prozentsatz verwendet. Wenn der für FILLFACTOR angegebene Prozentsatz nicht groß genug ist, um eine Zeile aufzunehmen, überschreibt die Datenbank-Engine diesen Prozentsatz intern, um das Minimum zuzulassen. Auf jeder Zwischenindexseite befinden sich unabhängig vom angegebenen fillfactor-Wert nie weniger als zwei Zeilen.

FILLFACTOR = fillfactor

Gibt einen Prozentsatz an, der angibt, wie weit das Datenbank-Engine die Blattebene jeder Indexseite während der Indexerstellung oder -neuerstellung füllen soll. fillfactor muss ein ganzzahliger Wert zwischen 1 und 100 sein. Die Standardeinstellung ist 0. Wenn fillfactor 100 oder 0 entspricht, werden von Datenbank-Engine Indizes mit vollständig aufgefüllten Blattseiten erstellt.

Hinweis

Die Füllfaktorwerte 0 und 100 sind in jeder Hinsicht identisch.

Die FILLFACTOR-Einstellung gilt nur, wenn der Index erstellt oder neu erstellt wird. Die Datenbank-Engine hält den angegebenen Prozentsatz des Speicherplatzes auf den Seiten nicht dynamisch frei. Zum Anzeigen der Füllfaktoreinstellung verwenden Sie die Katalogsicht sys.indexes.

Wichtig

Das Erstellen eines gruppierten Indexes mit einem FILLFACTOR-Wert unter 100 wirkt sich auf den Speicherplatz aus, den die Daten belegen, da Datenbank-Engine die Daten beim Erstellen des gruppierten Indexes neu verteilt.

Weitere Informationen finden Sie unter Angeben des Füllfaktors für einen Index.

SORT_IN_TEMPDB = { ON | OFF }

Gibt an, ob temporäre Ergebnisse des Sortierens in tempdb gespeichert werden sollen. Der Standardwert ist OFF.

EIN
Die Zwischenergebnisse von Sortierungen, mit denen der Index erstellt wird, werden in tempdb gespeichert. Dadurch kann sich die zum Erstellen eines Index erforderliche Zeit verringern, wenn sich tempdb in anderen Datenträgersätzen befindet als die Benutzerdatenbank. Sie erhöht jedoch den Betrag an Speicherplatz, der während der Indexerstellung verwendet wird.

OFF
Die Zwischenergebnisse der Sortierung werden in derselben Datenbank gespeichert wie der Index.

Zusätzlich zu dem Speicherplatz, der in der Benutzerdatenbank zum Erstellen des Index erforderlich ist, muss tempdb ungefähr die gleiche Menge an zusätzlichem Speicherplatz aufweisen, um die Zwischenergebnisse der Sortierung zu speichern. Weitere Informationen finden Sie unter SORT_IN_TEMPDB-Option für Indizes.

IGNORE_DUP_KEY = OFF

Hat keine Auswirkungen für XML-Indizes, da der Indextyp nie eindeutig ist. Legen Sie diese Option nicht auf ON fest, sonst wird ein Fehler ausgelöst.

DROP_EXISTING = { ON | OFF }

Gibt an, dass der benannte, bereits vorhandene XML-Index gelöscht und neu erstellt wird. Der Standardwert ist OFF.

EIN
Der vorhandene Index wird gelöscht und neu erstellt. Der angegebene Indexname muss mit dem Namen eines derzeit vorhandenen Index übereinstimmen. Die Indexdefinition kann jedoch geändert werden. Sie können beispielsweise andere Spalten, eine andere Sortierreihenfolge, ein anderes Partitionsschema oder andere Indexoptionen angeben.

OFF
Es wird ein Fehler angezeigt, wenn der angegebene Indexname bereits vorhanden ist.

Der Indextyp kann nicht mithilfe von DROP_EXISTING geändert werden. Es ist auch nicht möglich, einen primären XML-Index als sekundären XML-Index neu zu definieren oder umgekehrt.

ONLINE = OFF

Gibt an, dass zugrunde liegende Tabellen oder zugehörige Indizes für Abfragen und Datenänderungen während des Indexvorgangs nicht zur Verfügung stehen. In dieser Version von SQL Server werden Onlineindexerstellungen für XML-Indizes nicht unterstützt. Wenn diese Option für einen XML-Index auf ON festgelegt ist, wird ein Fehler ausgelöst. Lassen Sie die ONLINE-Option weg, oder legen Sie ONLINE auf OFF fest.

Ein Offlineindexvorgang, der einen XML-Index erstellt, neu erstellt oder löscht, aktiviert eine Schemaänderungssperre (Sch-M) für die Tabelle. Dadurch wird verhindert, dass Benutzer während des Vorgangs auf die zugrunde liegende Tabelle zugreifen können.

Hinweis

Onlineindexvorgänge sind nicht in jeder Edition von MicrosoftSQL Serververfügbar. Eine Liste der Funktionen, die von den SQL Server-Editionen unterstützt werden, finden Sie unter Editionen und unterstütze Funktionen für den SQL Server 2016.

ALLOW_ROW_LOCKS = { ON | OFF }

Gibt an, ob Zeilensperren zulässig sind. Der Standardwert ist ON.

EIN
Zeilensperren sind beim Zugriff auf den Index zulässig. Das Datenbank-Engine bestimmt, wann Zeilensperren verwendet werden.

OFF
Zeilensperren werden nicht verwendet.

ALLOW_PAGE_LOCKS = { ON | OFF }

Gibt an, ob Seitensperren zulässig sind. Der Standardwert ist ON.

EIN
Seitensperren sind beim Zugriff auf den Index zulässig. Das Datenbank-Engine bestimmt, wann Seitensperren verwendet werden.

OFF
Seitensperren werden nicht verwendet.

MAXDOP = max_degree_of_parallelism

Überschreibt die Konfigurationsoption Max. Grad an Parallelität während des Indexvorgangs. Sie können mit MAXDOP die Anzahl der Prozessoren begrenzen, die bei der Ausführung paralleler Pläne verwendet werden. Maximal sind 64 Prozessoren zulässig.

Wichtig

Obwohl die MAXDOP-Option syntaktisch für alle XML-Indizes unterstützt wird, verwendet CREATE XML INDEX für einen primären XML-Index nur einen einzelnen Prozessor.

max_degree_of_parallelism kann folgende Werte haben:

1
Unterdrückt das Generieren paralleler Pläne.

>1
Beschränkt die maximale Anzahl der Prozessoren, die bei einem parallelen Indexvorgang verwendet werden, je nach aktueller Systemauslastung auf die angegebene Zahl oder einen niedrigeren Wert.

0 (Standard)
Verwendet abhängig von der aktuellen Systemarbeitsauslastung die tatsächliche Anzahl von Prozessoren oder weniger Prozessoren.

Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgängen.

Hinweis

Parallele Indexvorgänge sind nicht in jeder Edition von MicrosoftSQL Server verfügbar. Eine Liste der Funktionen, die von den SQL Server-Editionen unterstützt werden, finden Sie unter Editionen und unterstütze Funktionen für den SQL Server 2016.

Bemerkungen

Berechnete Spalten, die von xml-Datentypen abgeleitet wurden, können als Schlüsselspalten oder als eingeschlossene Nichtschlüsselspalten indiziert werden, vorausgesetzt, der Datentyp der berechneten Spalte ist als Indexschlüsselspalte oder -nichtschlüsselspalte zulässig. Sie können keinen primären XML-Index für eine berechnete xml-Spalte erstellen.

Zum Anzeigen von Informationen zu XML-Indizes verwenden Sie die Katalogsicht sys.xml_indexes.

Weitere Informationen zu XML-Indizes finden Sie unter XML-Indizes (SQL Server).

XML-Komprimierung

Gilt für: SQL Server 2022 (16.x) Preview und höher sowie für Azure SQL-Datenbank Preview.

  • XML-Indizes erben die Komprimierungseigenschaft der Tabelle nicht. Um Indizes zu komprimieren, müssen Sie die XML-Komprimierung in XML-Indizes explizit aktivieren.
  • Sekundäre XML-Indizes erben nicht die Komprimierungseigenschaft des primären XML-Indexes.
  • Standardmäßig wird die XML-Komprimierungseinstellung bei Erstellung eines Indexes auf OFF festgelegt.

Weitere Hinweise zum Erstellen von Indizes

Weitere Informationen zum Erstellen von Indizes finden Sie in den Hinweisen unter CREATE INDEX (Transact-SQL).

Beispiele

In den folgenden Beispielen wird die AdventureWorks2012-Beispieldatenbank verwendet.

A. Erstellen eines primären XML-Indexes

Im folgenden Beispiel wird ein primärer XML-Index für die Spalte CatalogDescription in der Tabelle Production.ProductModel erstellt.

IF EXISTS (SELECT * FROM sys.indexes
            WHERE name = N'PXML_ProductModel_CatalogDescription')
    DROP INDEX PXML_ProductModel_CatalogDescription
        ON Production.ProductModel;  
GO  
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
    ON Production.ProductModel (CatalogDescription);  
GO

B. Erstellen eines primären XML-Indexes mit XML-Komprimierung

Im folgenden Beispiel wird ein primärer XML-Index für die Spalte CatalogDescription in der Tabelle Production.ProductModel erstellt.

IF EXISTS (SELECT * FROM sys.indexes
            WHERE name = N'PXML_ProductModel_CatalogDescription')
    DROP INDEX PXML_ProductModel_CatalogDescription
        ON Production.ProductModel;  
GO  
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
    ON Production.ProductModel (CatalogDescription)
    WITH (XML_COMPRESSION = ON);  
GO

C. Erstellen eines sekundären XML-Indexes

Im folgenden Beispiel wird ein sekundärer XML-Index für die Spalte CatalogDescription in der Tabelle Production.ProductModel erstellt.

IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IXML_ProductModel_CatalogDescription_Path')
    DROP INDEX IXML_ProductModel_CatalogDescription_Path
        ON Production.ProductModel;  
GO  
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path
    ON Production.ProductModel (CatalogDescription)
    USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH ;
GO

D: Erstellen eines sekundären XML-Indexes mit XML-Komprimierung

Im folgenden Beispiel wird ein sekundärer XML-Index für die Spalte CatalogDescription in der Tabelle Production.ProductModel erstellt.

IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IXML_ProductModel_CatalogDescription_Path')
    DROP INDEX IXML_ProductModel_CatalogDescription_Path
        ON Production.ProductModel;  
GO  
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path
    ON Production.ProductModel (CatalogDescription)
    USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH
    WITH (XML_COMPRESSION = ON);
GO

Weitere Informationen