SKAPA SELEKTIVT XML-INDEX (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Skapar ett nytt selektivt XML-index på den angivna tabellen och XML-kolumnen. Selektiva XML-index förbättrar prestandan för XML-indexering och frågeställande genom att indexera endast den delmängd av noder som du vanligtvis frågar i. Du kan också skapa sekundära selektiva XML-index. För information, se Skapa, ändra och ta bort sekundära selektiva XML-index.

Transact-SQL syntaxkonventioner

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.table_name | schema_name.table_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  
)  

Arguments

index_name
Är namnet på det nya indexet att skapa. Indexnamn måste vara unika inom en tabell, men behöver inte vara unika i en databas. Indexnamn måste följa reglerna för identifierare.

<table_object> Är tabellen som innehåller XML-kolumnen att indexera. Använd ett av följande format:

  • database_name.schema_name.table_name

  • database_name..table_name

  • schema_name.table_name

  • table_name

xml_column_name
Är namnet på XML-kolumnen som innehåller sökvägarna till indexering.

[MED XMLNAMNRYMDER (<xmlnamespace_list>)] Är listan över namnrymder som används av sökvägarna för indexering. För information om syntaxen i WITH XMLNAMESPACES-satsen, se WITH XMLNAMESPACES (Transact-SQL).

FOR (<promoted_node_path_list>) Är listan över vägar att indexera med valfria optimeringstips. För information om vägar och optimeringstips som du kan specificera i CREATE- eller ALTER-satsen, se Specificera vägar och optimeringstips för selektiva XML-index.

MED <index_options> För information om indexalternativen, se SKAPA XML-INDEX (Selektiva XML-index).

Metodtips

Skapa ett selektivt XML-index i stället för ett vanligt XML-index i de flesta fall för bättre prestanda och effektivare lagring. Ett selektivt XML-index rekommenderas dock inte när någon av följande villkor är uppfyllda:

  • Du behöver kartlägga ett stort antal nodvägar.

  • Du behöver stödja frågor för okända element eller element på en okänd plats.

Begränsningar och restriktioner

För information om begränsningar och begränsningar, se Selektiva XML-index (SXI).

Security

Permissions

Kräver ALTER-behörighet för tabellen eller vyn. Användaren måste vara medlem i sysadmin fast serverroll eller db_ddladmin och db_owner fasta databasroller.

Examples

I följande exempel visas syntaxen för att skapa ett selektivt XML-index. Den visar också flera varianter av syntaxen för att beskriva sökvägarna som ska indexeras, med valfria optimeringstips.

CREATE TABLE Tbl ( id INT PRIMARY KEY, xmlcol XML );  
GO  
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)  
);  

Följande exempel inkluderar en klausul MED XMLNAMESPACES.

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

Se även

Selektiva XML-index (SXI)
skapa, ändra och ta bort selektiva XML-index
Specificera vägar och optimeringstips för selektiva XML-index