CREATE XML INDEX (Transact-SQL)

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.

HinweisHinweis

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

Themenlink (Symbol)Transact-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 ] . | schema_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
}

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 SET-Optionen mit Auswirkungen auf Ergebnisse.

    Weitere Informationen finden Sie unter Indizes für Spalten des Datentyps XML.

  • index_name
    Der Name des Indexes. Indexnamen müssen für eine 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
    Gibt die xml-Spalte an, 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>::=

Gibt das vollqualifizierte oder nicht vollqualifizierte Objekt an, 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 den Indexabstand an. Der Standardwert ist OFF.

    • ON
      Der Prozentsatz des mit fillfactor angegebenen freien Speicherplatzes wird für die Zwischenebenenseiten des Index 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, setzt Database Engine (Datenbankmodul) diesen Prozentsatz intern außer Kraft, um das Minimum zuzulassen. Auf jeder Zwischenindexseite befinden sich unabhängig vom angegebenen fillfactor-Wert nie weniger als zwei Zeilen.  

  • FILLFACTOR **=**fillfactor
    Gibt einen Prozentwert an, der dem Füllfaktor entspricht. Dieser Faktor legt fest, wie weit Database Engine (Datenbankmodul) die Blattebene jeder Indexseite während der Indexerstellung oder -neuerstellung auffüllen soll. fillfactor muss ein ganzzahliger Wert zwischen 1 und 100 sein. Die Standardeinstellung ist 0. Wenn fillfactor 100 oder 0 entspricht, werden von Database Engine (Datenbankmodul) Indizes mit vollständig aufgefüllten Blattseiten erstellt.

    HinweisHinweis

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

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

    Wichtiger HinweisWichtig

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

    Weitere Informationen finden Sie unter Füllfaktor.

  • SORT_IN_TEMPDB = { ON | OFF }
    Gibt an, ob temporäre Ergebnisse des Sortierens in tempdb gespeichert werden sollen. Der Standardwert ist OFF.

    • ON
      Die zum Erstellen des Index verwendeten Zwischenergebnisse des Sortierens werden in tempdb gespeichert. Dadurch kann sich die zum Erstellen eines Index erforderliche Zeit verringern, wenn sich tempdb auf einem anderen Datenträgersatz befindet als die Benutzerdatenbank. Allerdings wird dadurch die Menge an Speicherplatz erhöht, die während der Indexerstellung verwendet wird.

    • OFF
      Die Zwischenergebnisse des Sortierens werden in derselben Datenbank wie der Index gespeichert.

    Zusätzlich zu dem Speicherplatz, der in der Benutzerdatenbank zum Erstellen des Indexes erforderlich ist, benötigt tempdb ungefähr die gleiche Menge an zusätzlichem Speicherplatz, um die Zwischenergebnisse des Sortierens zu speichern. Weitere Informationen finden Sie unter tempdb und Indexerstellung.

  • IGNORE_DUP_KEY **=**OFF
    Hat keine Auswirkungen auf XML-Indizes, da der Indextyp nie eindeutig ist. Legen Sie diese Option nicht auf ON fest, andernfalls 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.

    • ON
      Der vorhandene Index wird gelöscht und neu erstellt. Der angegebene Indexname muss mit dem 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. Auf diese Weise wird der Benutzerzugriff auf die zugrunde liegende Tabelle für die Dauer des Vorgangs verhindert.

    HinweisHinweis

    Onlineindexvorgänge sind nur in der SQL Server Enterprise, Developer und Evaluation Edition verfügbar.

  • ALLOW_ROW_LOCKS = { ON | OFF }
    Gibt an, ob Zeilensperren zulässig sind. Der Standardwert ist ON.

    • ON
      Zeilensperren sind beim Zugriff auf den Index zulässig. Database Engine (Datenbankmodul) legt fest, wann Zeilensperren verwendet werden.

    • OFF
      Es werden keine Zeilensperren verwendet.

  • ALLOW_PAGE_LOCKS = { ON | OFF }
    Gibt an, ob Seitensperren zulässig sind. Der Standardwert ist ON.

    • ON
      Seitensperren sind beim Zugriff auf den Index zulässig. Database Engine (Datenbankmodul) legt fest, wann Seitensperren verwendet werden.

    • OFF
      Es werden keine Seitensperren verwendet.

  • MAXDOP **=**max_degree_of_parallelism
    Setzt die Konfigurationsoption max degree of parallelism für die Dauer des Indexvorgangs außer Kraft. Sie können mit MAXDOP die Anzahl der Prozessoren begrenzen, die bei der Ausführung paralleler Pläne verwendet werden. Der Höchstwert ist 64 Prozessoren.

    Wichtiger HinweisWichtig

    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.

    Mögliche Werte für max_degree_of_parallelism sind:

    • 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 (Standardwert)
      Verwendet je nach aktueller Systemauslastung die tatsächliche oder eine geringere Anzahl von Prozessoren.

    Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgänge.

    HinweisHinweis

    Parallele Indexvorgänge sind nur in der SQL Server Enterprise, Developer und Evaluation Edition verfügbar.

Hinweise

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 Indizes für Spalten des Datentyps XML.

Weitere Hinweise zum Erstellen von Indizes

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

Beispiele

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.

USE AdventureWorks;
GO
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 sekundären XML-Indexes

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

USE AdventureWorks;
GO
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