CREATE SELECTIVE XML INDEX (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

在指定的資料表和 XML 資料行上建立新的選擇性 XML 索引。 選擇性 XML 索引會藉由只為您通常查詢的節點子集編制索引,提升 XML 索引和查詢的效能。 您也可以建立次要選擇性 XML 索引。 如相關資訊,請參閱建立、修改和卸除次要選擇性 XML 索引

Transact-SQL 語法慣例

語法

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  
)  

引數

index_name
這是要建立之新索引的名稱。 索引名稱在資料表中必須是唯一的,但是在資料庫中不一定要是唯一的。 索引名稱必須遵照識別碼的規則。

<table_object> 是包含要索引之 XML 資料行的資料表。 請使用下列其中一個格式:

  • database_name.schema_name.table_name

  • database_name..table_name

  • schema_name.table_name

  • table_name

xml_column_name
這是包含要索引之路徑的 XML 資料行名稱。

[WITH XMLNAMESPACES (<xmlnamespace_list>)] 是要索引之路徑所使用的命名空間清單。 如需 WITH XMLNAMESPACES 子句語法的相關資訊,請參閱 WITH XMLNAMESPACES (Transact-SQL)

FOR (<promoted_node_path_list>) 是要索引的路徑清單,包含選用的最佳化提示。 如需有關可以在 CREATE 或 ALTER 陳述式中指定之路徑的資訊和最佳化提示,請參閱指定選擇性 XML 索引的路徑和最佳化提示

WITH <index_options> 如需索引選項的相關資訊,請參閱 CREATE XML INDEX (選擇性 XML 索引)

最佳做法

在大部分情況下,建立選擇性 XML 索引會比一般 XML 索引獲得更佳的效能和更有效率的儲存。 但是,下列任一情況為 true 時,不建議使用選擇性 XML 索引:

  • 您需要對應大量節點路徑。

  • 您需要支援未知元素或未知位置中元素的查詢。

限制事項

如需限制事項的相關資訊,請參閱選擇性 XML 索引 (SXI)

安全性

權限

需要資料表或檢視表的 ALTER 權限。 使用者必須是 系統管理員 固定伺服器角色的成員,或是 db_ddladmindb_owner 固定資料庫角色的成員。

範例

下列範例會顯示建立選擇性 XML 索引的語法。 另外還會顯示描述要索引之路徑的多種語法變化,包含選用的最佳化提示。

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

下列範例包括 WITH XMLNAMESPACES 子句。

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

另請參閱

選擇性 XML 索引 (SXI)
建立、修改和卸除選擇性 XML 索引
指定選擇性 XML 索引的路徑和最佳化提示