Sdílet prostřednictvím


VYTVOŘENÍ SELEKTIVNÍHO XML INDEXU (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Vytváří nový selektivní XML index na zadanou tabulku a XML sloupec. Selektivní XML indexy zlepšují výkon XML indexování a dotazování tím, že indexují pouze podmnožinu uzlů, které obvykle dotazujete. Můžete také vytvářet sekundární selektivní XML indexy. Pro informace viz Vytváření, úprava a rušení sekundárních selektivních XML indexů.

Transact-SQL konvence syntaxe

Syntaxe

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
Je název nového indexu pro vytvoření. Názvy indexů musí být v tabulce jedinečné, ale nemusí být jedinečné v rámci databáze. Názvy indexů musí dodržovat pravidla identifikátorů .

<table_object> Je tabulka, která obsahuje sloupec XML pro index. Použijte jeden z následujících formátů:

  • database_name.schema_name.table_name

  • database_name..table_name

  • schema_name.table_name

  • table_name

xml_column_name
Je název XML sloupce, který obsahuje cesty k indexování.

[S XMLNAMESPACES (<xmlnamespace_list>)] Je seznam jmenných prostorů používaných cestami k indexování. Pro informace o syntaxi klauzule WITH XMLNAMESPACES viz WITH XMLNAMESPACES (Transact-SQL).

FOR (<promoted_node_path_list>) Je seznam cest k indexování s volitelnými optimalizačními nápovědami. Pro informace o cestách a optimalizačních nápovědách, které můžete specifikovat v příkazu CREATE nebo ALTER, viz Specifikovat cesty a optimalizační hinty pro selektivní XML indexy.

S <index_options> Informace o možnostech indexu naleznete v článku CREATE XML INDEX (Selective XML Indexes).

Osvědčené postupy

Ve většině případů vytvořte selektivní index XML místo běžného indexu XML pro lepší výkon a efektivnější úložiště. Selektivní XML index se však nedoporučuje, pokud platí některá z následujících podmínek:

  • Musíte mapovat velké množství uzlových cest.

  • Musíte podporovat dotazy na neznámé prvky nebo prvky na neznámém místě.

Limitace a omezení

Pro informace o omezeních a omezeních viz Selective XML Indexes (SXI).

Zabezpečení

Povolení

Vyžaduje oprávnění ALTER v tabulce nebo zobrazení. Uživatel musí být členem pevné serverové role sysadmin nebo pevné databázové role db_ddladmin a db_owner.

Examples

Následující příklad ukazuje syntaxi pro vytvoření selektivního indexu XML. Zobrazuje také několik variant syntaxe pro popis cest, které se mají indexovat, s volitelnými pokyny pro optimalizaci.

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)  
);  

Následující příklad obsahuje klauzuli WITH XMLNAMESPACES.

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

Viz také

selektivní indexy XML (SXI)
vytváření, změny a odstraňování selektivních indexů XML
Specifikujte cesty a optimalizační tipy pro selektivní XML indexy