Bagikan melalui


BUAT INDEKS VEKTOR (Transact-SQL)

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

Konvensi sintaks Transact-SQL

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:

  1. Mengaktifkan bendera pelacakan, yang diperlukan dalam pratinjau saat ini.
  2. Buat tabel dbo.Articles sampel dengan kolom embedding dengan vektor tipe data(5).
  3. Sisipkan data sampel dengan data penyematan tiruan.
  4. Buat indeks vektor pada dbo.Articles.embedding.
  5. 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;