Compartilhar via


CREATE SELECTIVE XML INDEX

Cria um novo índice XML seletivo na tabela especificada e na coluna XML.

Os índices XML seletivos melhoram o desempenho da indexação e consulta XML indexando somente o subconjunto de nós normalmente consultado.

Para obter mais informações, consulte os tópicos a seguir:

Também é possível criar índices XML seletivos secundários. Para obter informações, consulte Criar, alterar e remover índices XML seletivos secundários.

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

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
)

Argumentos

cláusula CREATE

  • index_name
    Nome do novo índice a ser criado. Os nomes de índice devem ser exclusivos em uma tabela, mas não precisam ser exclusivos em um banco de dados. Os nomes de índice devem seguir as regras de identificadores.

Por exemplo: CREATE SELECTIVE XML INDEX sxi_index

Cláusula ON

  • <table_object>
    Tabela que contém a coluna XML a ser indexada. Use um destes formatos:

    • database_name.schema_name.table_name

    • database_name..table_name

    • schema_name.table_name

    • table_name

  • xml_column_name
    Nome da coluna XML que contém os caminhos a serem indexados.

Por exemplo: ON Tbl(xmlcol)

cláusula WITH XMLNAMESPACES

  • <xmlnamespace_list>
    Lista de namespaces usados pelos caminhos a serem indexados. Para obter informações sobre a sintaxe da cláusula WITH XMLNAMESPACES, consulte WITH XMLNAMESPACES (Transact-SQL).

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

cláusula FOR

Por exemplo:

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

cláusula WITH

Práticas recomendadas

Na maioria das vezes, crie um índice XML seletivo, em vez de um índice XML comum, para obter melhor desempenho e um armazenamento mais eficiente. Entretanto, um índice XML seletivo não é recomendado quando uma das seguintes condições é verdadeira:

  • É necessário mapear um grande número de caminhos do nó.

  • É necessário dar suporte a consultas de elementos desconhecidos ou elementos em um local desconhecido.

Limitações e restrições

Para obter informações sobre limitações e restrições, consulte SXI (índices XML seletivos).

Segurança

Permissões

Requer a permissão ALTER na tabela ou exibição. O usuário deve ser membro da função de servidor fixa sysadmin ou das funções de banco de dados fixas db_ddladmin e db_owner.

Exemplos

O exemplo a seguir mostra a sintaxe para criar um índice XML seletivo. Ele também mostra variações da sintaxe para descrever os caminhos a serem indexados, com dicas de otimização opcionais.

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

O exemplo a seguir inclui uma cláusula WITH XMLNAMESPACES.

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

Consulte também

Conceitos

SXI (índices XML seletivos)

Criar, alterar e remover índices XML seletivos

Especificar caminhos e dicas de otimização para índices XML seletivos