Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pratinjau SQL Server 2025 (17.x)
Buat perkiraan indeks pada kolom vektor untuk meningkatkan performa pencarian tetangga terdekat. Untuk mempelajari selengkapnya tentang cara kerja pengindeksan vektor dan pencarian vektor, dan perbedaan antara pencarian yang tepat dan perkiraan, lihat Vektor di Mesin Database SQL.
Fitur pratinjau
Nota
Fitur ini dalam pratinjau dan dapat berubah. Pastikan untuk membaca persyaratan penggunaan pratinjau dalam Perjanjian Tingkat Layanan (SLA) untuk Layanan Online.
Fitur ini masih dalam pratinjau. Untuk menggunakan fitur ini, Anda harus mengaktifkan bendera pelacakan berikut:
DBCC TRACEON(466, 474, 13981, -1)
Pastikan untuk memeriksa batasan saat ini sebelum menggunakannya.
Sintaksis
CREATE VECTOR INDEX index_name
ON object ( vector_column )
[ WITH (
[,] METRIC = { 'cosine' | 'dot' | 'euclidean' }
[ [,] TYPE = 'DiskANN' ]
[ [,] MAXDOP = max_degree_of_parallelism ]
[ [,] DROP_EXISTING = { ON | OFF } ]
) ]
[ ON { filegroup_name | "default" } ]
[;]
Argumen
index_name
Nama indeks. Nama indeks harus unik dalam tabel tetapi tidak harus unik dalam database. Nama indeks harus mengikuti aturan pengidentifikasi.
benda
Tabel tempat indeks dibuat. Ini harus tabel dasar. Tampilan, tabel sementara, baik lokal maupun global, tidak didukung.
vector_column
Kolom yang akan digunakan untuk membuat indeks vektor. Ini harus berjenis vektor .
METRIK = { 'kosinus' | 'titik' | 'euclidean' }
String dengan nama metrik jarak yang akan digunakan untuk menghitung jarak antara dua vektor yang diberikan. Metrik jarak berikut didukung:
-
cosine
- Jarak kosinus -
euclidean
- Jarak Euclidean -
dot
- (Negatif) Produk titik
TYPE = 'DiskANN'
Jenis algoritma ANN yang digunakan untuk membangun indeks. Hanya DiskANN
yang saat ini didukung. DiskANN adalah nilai default.
MAXDOP = max_degree_of_parallelism
Mengambil alih tingkat maksimum opsi konfigurasi paralelisme untuk operasi indeks. Untuk informasi selengkapnya, lihat Tingkat paralelisme maksimum. Gunakan MAXDOP
untuk membatasi tingkat paralelisme dan konsumsi sumber daya yang dihasilkan untuk operasi build indeks.
max_degree_of_parallelism dapat berupa:
1
Menonaktifkan pembuatan rencana paralel.
>1
Membatasi tingkat paralelisme maksimum yang digunakan dalam operasi indeks paralel ke angka yang ditentukan atau kurang berdasarkan beban kerja sistem saat ini.
0
(standar)Menggunakan tingkat paralelisme yang ditentukan di tingkat grup server, database, atau beban kerja, kecuali dikurangi berdasarkan beban kerja sistem saat ini.
Untuk informasi selengkapnya, lihat Mengonfigurasi Operasi Indeks Paralel.
Nota
Operasi indeks paralel tidak tersedia di setiap edisi Microsoft SQL Server. Untuk daftar fitur yang didukung oleh edisi SQL Server, lihat Edisi dan fitur yang didukung SQL Server 2022 atau Edisi dan fitur pratinjau SQL Server 2025 yang didukung.
DROP_EXISTING = { AKTIF | NONAKTIF }
Adalah opsi untuk menghilangkan dan membangun kembali indeks vektor yang ada dengan spesifikasi yang dimodifikasi, dan mempertahankan nama yang sama untuk indeks. Defaultnya adalah OFF
.
ON
Menentukan untuk menghilangkan dan membangun kembali indeks yang ada, yang harus memiliki nama yang sama dengan parameter index_name.
OFF
Menentukan untuk tidak menghilangkan dan membangun kembali indeks yang ada. SQL Server menampilkan kesalahan jika nama indeks yang ditentukan sudah ada.
Keterbatasan
Pratinjau saat ini memiliki batasan berikut:
- Indeks vektor tidak dapat dipartisi. Tidak ada dukungan partisi.
- Tabel harus memiliki satu kolom, bilangan bulat, indeks berkluster kunci utama.
- Tabel dengan indeks vektor menjadi baca saja. Tidak ada modifikasi data yang diizinkan saat indeks vektor ada di tabel.
- Indeks vektor tidak direplikasi ke pelanggan.
Hak akses
Pengguna harus memiliki ALTER
izin pada tabel.
Contoh
Detail database yang digunakan dalam sampel dapat ditemukan di sini: Unduh dan impor Artikel Wikipedia dengan Penyematan Vektor.
Contoh mengasumsikan keberadaan tabel bernama wikipedia_articles
dengan kolom title_vector
jenis vector
yang menyimpan penyematan judul artikel Wikipedia.
title_vector
diasumsikan sebagai penyematan yang dihasilkan dengan model penyematan seperti text-embedding-ada-002 atau text-embedding-3-small, yang mengembalikan vektor dengan 1.536 dimensi.
Untuk contoh lainnya, termasuk solusi end-to-end, buka repositori GitHub Sampel Pencarian Vektor Azure SQL Database.
Contoh 1
Contoh berikut membuat indeks vektor pada title_vector
kolom menggunakan cosine
metrik.
CREATE VECTOR INDEX vec_idx ON [dbo].[wikipedia_articles]([title_vector])
WITH (METRIC = 'cosine', TYPE = 'diskann');
Contoh 2
Contoh berikut membuat indeks vektor pada title_vector
kolom menggunakan metrik produk (negatif), dot
membatasi paralelisme ke 8 dan menyimpan vektor dalam SECONDARY
grup file.
CREATE VECTOR INDEX vec_idx ON [dbo].[wikipedia_articles]([title_vector])
WITH (METRIC = 'cosine', TYPE = 'diskann', MAXDOP = 8)
ON [SECONDARY]
Contoh 3
Contoh end-to-end dasar menggunakan CREATE VECTOR INDEX
dan fungsi terkait VECTOR_SEARCH
. Penyematan dititipkan. Dalam skenario dunia nyata, penyematan dihasilkan menggunakan model penyematan dan AI_GENERATE_EMBEDDINGS, atau pustaka eksternal seperti OpenAI SDK.
Blok kode berikut membuat penyematan tiruan dengan langkah-langkah berikut:
- Mengaktifkan bendera pelacakan, yang diperlukan dalam pratinjau saat ini.
- Buat tabel
dbo.Articles
sampel dengan kolomembedding
dengan vektor tipe data(5). - Sisipkan data sampel dengan data penyematan tiruan.
- Buat indeks vektor pada
dbo.Articles.embedding
. - Menunjukkan pencarian kesamaan vektor dengan
VECTOR_SEARCH()
fungsi .
-- Step 0: Enable Preview Feature
DBCC TRACEON(466, 474, 13981, -1);
GO
-- Step 1: Create a sample table with a VECTOR(5) column
CREATE TABLE dbo.Articles
(
id INT PRIMARY KEY,
title NVARCHAR(100),
content NVARCHAR(MAX),
embedding VECTOR(5) -- mocked embeddings
);
-- Step 2: Insert sample data
INSERT INTO Articles (id, title, content, embedding)
VALUES
(1, 'Intro to AI', 'This article introduces AI concepts.', '[0.1, 0.2, 0.3, 0.4, 0.5]'),
(2, 'Deep Learning', 'Deep learning is a subset of ML.', '[0.2, 0.1, 0.4, 0.3, 0.6]'),
(3, 'Neural Networks', 'Neural networks are powerful models.', '[0.3, 0.3, 0.2, 0.5, 0.1]'),
(4, 'Machine Learning Basics', 'ML basics for beginners.', '[0.4, 0.5, 0.1, 0.2, 0.3]'),
(5, 'Advanced AI', 'Exploring advanced AI techniques.', '[0.5, 0.4, 0.6, 0.1, 0.2]');
-- Step 3: Create a vector index on the embedding column
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (metric = 'cosine', type = 'diskann');
-- Step 4: Perform a vector similarity search
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT
t.id,
t.title,
t.content,
s.distance
FROM
VECTOR_SEARCH(
table = Articles AS t,
column = embedding,
similar_to = @qv,
metric = 'cosine',
top_n = 3
) AS s
ORDER BY s.distance, t.title;