共用方式為


CREATE SELECTIVE XML INDEX

在指定的資料表和 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 ] . | 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
)

引數

CREATE 子句

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

例如:CREATE SELECTIVE XML INDEX sxi_index

ON 子句

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

    • database_name.schema_name.table_name

    • database_name..table_name

    • schema_name.table_name

    • table_name

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

例如:ON Tbl(xmlcol)

WITH XMLNAMESPACES 子句

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

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

FOR 子句

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

例如:

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 子句

最佳作法

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

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

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

限制事項

如需有關限制事項的詳細資訊,請參閱<選擇性 XML 索引 (SXI)>。

安全性

權限

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

範例

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

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 ('http://www.tempuri.org/' as myns)
FOR ( path1 = '/myns:book/myns:author/text()' )

請參閱

概念

選擇性 XML 索引 (SXI)

建立、修改和卸除選擇性 XML 索引

指定選擇性 XML 索引的路徑和最佳化提示