Freigeben über


CREATE SELECTIVE XML INDEX

Erstellt in der angegebenen Tabelle und XML-Spalte einen neuen selektiven XML-Index.

Selektive XML-Indizes verbessern die Leistung von XML-Indizierung und -Abfrage, da lediglich die Teilmenge der Knoten indiziert wird, die Sie in der Regel abfragen.

Weitere Informationen finden Sie in folgenden Themen:

Sie können auch sekundäre selektive XML-Indizes erstellen. Weitere Informationen finden Sie unter Erstellen, Ändern und Löschen sekundärer, selektiver XML-Indizes.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

CREATE SELECTIVE XML INDEX index_name
ON <table_object> (<xml_column_name>)
[WITH XMLNAMESPACES (<xmlnamespace_list>)]
FOR (<promoted_node_path_list>)
[WITH (<index_options>)]

<table_object> ::= { [ database_name. [ schema_name ] . | schema_name. ] table_name }

<promoted_node_path_list> ::= <named_promoted_node_path_item> [, <promoted_node_path_list>]

<named_promoted_node_path_item> ::= <path_name> = <promoted_node_path_item>

<promoted_node_path_item>::=<xquery_node_path_item> | <sql_values_node_path_item>

<xquery_node_path_item> ::= <node_path> [as XQUERY <xsd_type_or_node_hint>] [SINGLETON]

<xsd_type_or_node_hint> ::= [<xsd_type>] [MAXLENGTH(x)] | node()

<sql_values_node_path_item> ::= <node_path> as SQL <sql_type> [SINGLETON]

<node_path> ::= <character_string_literal>

<xsd_type> ::= <character_string_literal>

<sql_type> ::= <identifier>

<path_name> ::= <identifier>

<xmlnamespace_list> ::= <xmlnamespace_item> [, <xmlnamespace_list>]

<xmlnamespace_item> ::= <xmlnamespace_uri> AS <xmlnamespace_prefix>

<xml_namespace_uri> ::= <character_string_literal>

<xml_namespace_prefix> ::= <identifier>

<index_options> ::= ( 
  | 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

CREATE-Klausel

  • index_name
    Der Name des neu zu erstellenden 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.

Beispiel: CREATE SELECTIVE XML INDEX sxi_index

ON-Klausel

  • <table_object>
    Die Tabelle, die die zu indizierende XML-Spalte enthält. Verwenden Sie eines der folgenden Formate:

    • database_name.schema_name.table_name

    • database_name..table_name

    • schema_name.table_name

    • table_name

  • xml_column_name
    Der Name der XML-Spalte, die die zu indizierenden Pfade enthält.

Beispiel: ON Tbl(xmlcol)

WITH XMLNAMESPACES-Klausel

  • <xmlnamespace_list>
    Die Liste der von den zu indizierenden Pfaden verwendeten Namespaces. Weitere Informationen zur Syntax der WITH XMLNAMESPACES-Klausel finden Sie unter WITH XMLNAMESPACES (Transact-SQL).

Beispiel: WITH XMLNAMESPACES ('http://www.tempuri.org/' as myns)

FOR-Klausel

Beispiel:

FOR(
    pathab   = '/a/b' as XQUERY 'node()'
    pathabc  = '/a/b/c' as XQUERY 'xs:double', 
    pathdtext = '/a/b/d/text()' as XQUERY 'xs:string' MAXLENGTH(200) SINGLETON
    pathabe = '/a/b/e' as SQL NVARCHAR(100)
)

WITH-Klausel

Bewährte Methoden

Erstellen Sie im Hinblick auf eine bessere Leistung und einen effizienteren Speicher in den meisten Fällen einen selektiven XML-Index anstatt eines gewöhnlichen XML-Indexes. Ein selektiver XML-Index wird jedoch nicht empfohlen, wenn eine der beiden folgenden Bedingungen gilt:

  • Sie müssen eine große Anzahl an Knotenpfaden zuordnen.

  • Sie müssen Abfragen von unbekannten Elementen oder Elementen an einem unbekannten Speicherort unterstützen.

Einschränkungen

Informationen über Begrenzungen und Einschränkungen finden Sie unter Selektive XML-Indizes (SXI).

Sicherheit

Berechtigungen

Erfordert die ALTER-Berechtigung in der Tabelle oder Sicht. Der Benutzer muss ein Mitglied der festen Serverrolle sysadmin bzw. der festen Datenbankrollen db_ddladmin und db_owner sein.

Beispiele

Im folgenden Beispiel wird die Syntax zum Erstellen eines selektiven XML-Indexes veranschaulicht. Zudem werden mehrere Variationen der Syntax zum Beschreiben der zu indizierenden Pfade mit optionalen Optimierungshinweisen angegeben.

CREATE SELECTIVE XML INDEX sxi_index
ON Tbl(xmlcol)

FOR(
    pathab   = '/a/b' as XQUERY 'node()'
    pathabc  = '/a/b/c' as XQUERY 'xs:double', 
    pathdtext = '/a/b/d/text()' as XQUERY 'xs:string' MAXLENGTH(200) SINGLETON
    pathabe = '/a/b/e' as SQL NVARCHAR(100)
)

Das folgende Beispiel enthält eine WITH XMLNAMESPACES-Klausel.

CREATE SELECTIVE XML INDEX on T1(C1)
WITH XMLNAMESPACES ('http://www.tempuri.org/' as myns)
FOR ( path1 = '/myns:book/myns:author/text()' )

Siehe auch

Konzepte

Selektive XML-Indizes (SXI)

Erstellen, Ändern und Löschen selektiver XML-Indizes

Angeben von Pfaden und Optimierungshinweisen für selektive XML-Indizes