Bagikan melalui


MEMBUAT INDEKS XML SELEKTIF (Transact-SQL)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Membuat indeks XML selektif baru pada tabel dan kolom XML yang ditentukan. Indeks XML selektif meningkatkan performa pengindeksan dan kueri XML dengan hanya mengindeks subset simpul yang biasanya Anda kueri. Anda juga dapat membuat indeks XML selektif sekunder. Untuk informasi, lihat Membuat, Mengubah, dan Menghilangkan Indeks XML Selektif Sekunder.

Konvensi sintaks transact-SQL

Sintaks

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  
)  

Argumen

index_name
Adalah nama indeks baru yang akan dibuat. Nama indeks harus unik dalam tabel, tetapi tidak harus unik dalam database. Nama indeks harus mengikuti aturan pengidentifikasi.

<> table_object Adalah tabel yang berisi kolom XML untuk diindeks. Gunakan salah satu format berikut:

  • database_name.schema_name.table_name

  • database_name..table_name

  • schema_name.table_name

  • table_name

xml_column_name
Adalah nama kolom XML yang berisi jalur untuk diindeks.

[DENGAN XMLNAMESPACES (<xmlnamespace_list>)] Adalah daftar namespace layanan yang digunakan oleh jalur untuk diindeks. Untuk informasi tentang sintaksis klausa WITH XMLNAMESPACES, lihat WITH XMLNAMESPACES (Transact-SQL).

FOR (<promoted_node_path_list>) Adalah daftar jalur untuk diindeks dengan petunjuk pengoptimalan opsional. Untuk informasi tentang jalur dan petunjuk pengoptimalan yang dapat Anda tentukan dalam pernyataan CREATE atau ALTER, lihat Menentukan Jalur dan Petunjuk Pengoptimalan untuk Indeks XML Selektif.

WITH <index_options> Untuk informasi tentang opsi indeks, lihat MEMBUAT INDEKS XML (Indeks XML Selektif).

Praktik Terbaik

Buat indeks XML selektif alih-alih indeks XML biasa dalam kebanyakan kasus untuk performa yang lebih baik dan penyimpanan yang lebih efisien. Namun, indeks XML selektif tidak disarankan ketika salah satu kondisi berikut ini benar:

  • Anda perlu memetakan sejumlah besar jalur simpul.

  • Anda perlu mendukung kueri untuk elemen atau elemen yang tidak diketahui di lokasi yang tidak diketahui.

Batasan dan Pembatasan

Untuk informasi tentang batasan dan pembatasan, lihat Indeks XML Selektif (SXI).

Keamanan

Izin

Memerlukan izin ALTER pada tabel atau tampilan. Pengguna harus menjadi anggota peran server tetap sysadmin atau peran database tetap db_ddladmin dan db_owner .

Contoh

Contoh berikut menunjukkan sintaks untuk membuat indeks XML selektif. Ini juga menunjukkan beberapa variasi sintaks untuk menjelaskan jalur yang akan diindeks, dengan petunjuk pengoptimalan opsional.

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

Contoh berikut menyertakan klausa WITH XMLNAMESPACES.

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

Lihat Juga

Indeks XML Selektif (SXI)
Membuat, Mengubah, dan Menghilangkan Indeks XML Selektif
Tentukan Jalur dan Petunjuk Pengoptimalan untuk Indeks XML Selektif