Indeks XML Selektif (SXI)
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Indeks XML selektif adalah jenis indeks XML lain yang tersedia untuk Anda selain indeks XML biasa. Tujuan fitur indeks XML selektif adalah sebagai berikut:
Untuk meningkatkan performa kueri melalui data XML yang disimpan di SQL Server.
Untuk mendukung pengindeksan beban kerja data XML besar yang lebih cepat.
Untuk meningkatkan skalabilitas dengan mengurangi biaya penyimpanan indeks XML.
Batasan utama dengan indeks XML biasa adalah bahwa mereka mengindeks seluruh dokumen XML. Hal ini menyebabkan beberapa kelemahan signifikan, seperti penurunan performa kueri dan peningkatan biaya pemeliharaan indeks, sebagian besar terkait dengan biaya penyimpanan indeks.
Fitur indeks XML selektif memungkinkan Anda mempromosikan hanya jalur tertentu dari dokumen XML untuk diindeks. Pada waktu pembuatan indeks, jalur ini dievaluasi, dan simpul yang mereka tunjuk dihancurkan dan disimpan di dalam tabel relasional di SQL Server. Fitur ini menggunakan algoritma pemetaan efisien yang dikembangkan oleh Microsoft Research bekerja sama dengan tim produk SQL Server. Algoritma ini memetakan simpul XML ke satu tabel relasional, dan mencapai performa luar biasa sambil hanya membutuhkan ruang penyimpanan sederhana.
Fitur indeks XML selektif juga mendukung indeks XML selektif sekunder melalui simpul yang telah diindeks oleh indeks XML selektif. Indeks selektif sekunder ini efisien dan lebih meningkatkan performa kueri.
Manfaat indeks XML selektif
Indeks XML selektif memberikan manfaat berikut:
Performa kueri yang sangat ditingkatkan melalui jenis data XML untuk beban kueri umum.
Mengurangi persyaratan penyimpanan dibandingkan dengan indeks XML biasa.
Mengurangi biaya pemeliharaan indeks dibandingkan dengan indeks XML biasa.
Tidak perlu memperbarui aplikasi untuk mendapatkan manfaat dari indeks XML selektif.
Indeks XML selektif dan indeks XML utama
Penting
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 memetakan sejumlah besar jalur simpul.
Anda mendukung kueri untuk elemen atau elemen yang tidak diketahui di lokasi yang tidak diketahui dalam struktur dokumen.
Contoh indeks XML selektif
Pertimbangkan fragmen XML berikut sebagai dokumen XML dalam tabel sekitar 500.000 baris:
<book>
<created>2004-03-01</created>
<authors>Various</authors>
<subjects>
<subject>English wit and humor -- Periodicals</subject>
<subject>AP</subject>
</subjects>
<title>Punch, or the London Charivari, Volume 156, April 2, 1919</title>
<id>etext11617</id>
</book>
Membuat indeks XML utama melalui begitu banyak baris skema sederhana ini membutuhkan waktu lama. Mengkueri data ini juga menderita fakta bahwa indeks XML utama tidak mendukung pengindeksan selektif.
Jika Anda hanya perlu mengkueri data ini melalui /book/title
jalur dan /book/subjects
jalur, Anda bisa membuat indeks XML selektif berikut:
CREATE SELECTIVE XML INDEX SXI_index
ON Tbl(xmlcol)
FOR
(
pathTitle = '/book/title/text()' AS XQUERY 'xs:string',
pathAuthors = '/book/authors' AS XQUERY 'node()',
pathId = '/book/id' AS SQL NVARCHAR(100)
);
Pernyataan sebelumnya adalah contoh sintaksIS CREATE yang baik yang Anda gunakan saat membuat indeks XML selektif. Dalam pernyataan CREATE, pertama-tama Anda memberikan nama untuk indeks dan mengidentifikasi tabel dan kolom XML untuk diindeks. Kemudian Anda menyediakan jalur untuk diindeks. Jalur memiliki tiga bagian:
Nama yang secara unik mengidentifikasi jalur.
Ekspresi XQuery yang menjelaskan jalur.
Petunjuk pengoptimalan opsional.
Untuk informasi selengkapnya tentang elemen-elemen ini, lihat Tugas Terkait.
Fitur, Prasyarat, dan Batasan yang Didukung
Fitur XML yang didukung
Indeks XML selektif mendukung XQuery yang didukung oleh SQL Server di dalam exist()
metode , value()
, dan nodes()
.
exist()
Untuk metode ,value()
dannodes()
, indeks XML selektif berisi informasi yang cukup untuk mengubah seluruh ekspresi.query()
Untuk metode danmodify()
, indeks XML selektif hanya dapat digunakan untuk pemfilteran simpul.Untuk metode ,
query()
indeks XML selektif tidak digunakan untuk mengambil hasil.Untuk metode ,
modify()
indeks XML selektif tidak digunakan untuk memperbarui dokumen XML.
Fitur XML yang tidak didukung
Indeks XML selektif tidak mendukung fitur berikut yang didukung dalam implementasi XML SQL Server:
Pengindeksan simpul dengan jenis XS kompleks: jenis gabungan, jenis urutan, dan jenis daftar.
Pengindeksan simpul dengan jenis XS biner: misalnya, base64Binary dan hexBinary.
Menentukan simpul yang akan diindeks dengan ekspresi XPath yang berisi karakter
*
kartubebas di akhir: Misalnya, ,/a/b/c/*
,/a//b/*
atau/a/b/*:c
.Mengindeks sumbu apa pun selain anak, atribut, atau turunan. Kasus
//<step>
ini diizinkan sebagai kasus khusus.Pengindeksan instruksi dan komentar pemrosesan XML.
Menentukan dan mengambil pengidentifikasi untuk simpul dengan menggunakan fungsi id().
Prasyarat
Prasyarat berikut harus ada sebelum Anda bisa membuat indeks XML selektif melalui kolom XML dalam tabel pengguna:
Indeks berkluster harus ada pada kunci utama tabel pengguna.
Kunci utama tabel pengguna dibatasi hingga ukuran 128 byte saat digunakan dengan indeks XML selektif.
Kunci pengklusteran tabel pengguna dibatasi hingga 15 kolom saat digunakan dengan indeks XML selektif.
Batasan
Persyaratan dan batasan umum
- Setiap indeks XML selektif hanya dapat dibuat pada satu kolom XML
- Anda tidak dapat membuat indeks XML selektif pada kolom non-XML
- Setiap kolom XML dalam tabel hanya dapat memiliki satu indeks XML selektif
- Setiap tabel dapat memiliki hingga 249 indeks XML selektif.
Batasan pada objek yang didukung
Anda tidak dapat membuat indeks XML selektif pada objek berikut:
- Kolom XML dalam tampilan
- Variabel bernilai tabel dengan kolom XML
- Variabel jenis XML
- Kolom XML komputasi
- Kolom XML dengan kedalaman lebih dari 128 simpul berlapis.
Batasan penyimpanan
Ada batas terbatas pada jumlah simpul dari dokumen XML yang dapat ditambahkan ke indeks. Indeks XML selektif memetakan dokumen XML ke satu tabel relasional. Oleh karena itu tidak boleh memiliki lebih dari 1024 kolom non-null di baris tabel tertentu. Selain itu, banyak batasan kolom jarang juga berlaku untuk indeks XML selektif, karena indeks menggunakan kolom jarang untuk penyimpanan.
Jumlah maksimum kolom non-null yang didukung di baris tertentu bergantung pada ukuran data dalam kolom:
Dalam kasus terbaik, 1024 kolom non-null didukung ketika semua kolom berjenis bit.
Dalam kasus terburuk, hanya 236 kolom non-null yang didukung ketika semua kolom adalah objek besar jenis varchar.
Indeks XML selektif digunakan dari satu hingga empat kolom secara internal untuk setiap jalur simpul yang diindeks. Jumlah total simpul yang dapat diindeks berkisar dari 60 hingga beberapa ratus simpul, tergantung pada ukuran aktual data di jalur terindeks.
Dalam kasus terburuk, ketika beberapa atau semua simpul dipetakan menggunakan
//
dalam definisi jalur simpul, jumlah maksimum simpul terindeks adalah 60.Dalam kasus terbaik, ketika simpul dipetakan tanpa menggunakan
//
dalam definisi jalur simpul, jumlah maksimum simpul terindeks adalah 200.
Indeks XML selektif dibangun kembali saat Anda MEMBUAT atau MENGUBAH indeks
Saat Anda MEMBUAT atau MENGUBAH indeks XML selektif, indeks XML tersebut dibangun kembali dalam mode offline berutas tunggal. Sering mengubah pernyataan secara negatif memengaruhi performa kueri atas dokumen XML yang diindeks.
Batasan lainnya
Indeks XML selektif tidak didukung dalam petunjuk kueri.
Indeks XML selektif dan indeks XML selektif sekunder tidak didukung di Database Tuning Advisor.