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.
Berlaku untuk: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
Database SQL di Microsoft Fabric
Buat indeks perkiraan pada kolom vektor untuk meningkatkan kinerja pencarian tetangga terdekat. Untuk mempelajari lebih lanjut tentang cara kerja pengindeksan vektor dan pencarian vektor, serta perbedaan antara pencarian eksak dan perkiraan, lihat Indeks pencarian vektor dan vektor di SQL Database Engine.
Ketersediaan fitur
- Indeks vektor dan
VECTOR_SEARCHumumnya tersedia (GA) dalam Azure SQL Database, database SQL dalam Microsoft Fabric, dan Azure SQL Managed Instance dengan kebijakan pembaruanAlways-up-to-date. - Indeks vektor dan
VECTOR_SEARCHmerupakan fitur pratinjau di SQL Server 2025 (17.x) dan di Azure SQL Managed Instance dengan kebijakan pembaruan SQL Server 2025.
Peringatan
Pemberitahuan penghentian penggunaan: Indeks vektor yang dibuat menggunakan struktur data sebelumnya didukung dalam rilis saat ini tetapi akan dipensiunkan di versi mendatang. Untuk memastikan kompatibilitas di masa depan dan akses ke kemampuan pencarian vektor terbaru, migrasikan indeks vektor yang sudah ada dengan menggunakan langkah-langkah di bagian Migrasi dari versi indeks vektor sebelumnya .
Fitur pratinjau SQL Server 2025
Dalam SQL Server 2025 dan Azure SQL Managed Instance dalam kebijakan pembaruanSQL Server 2025, indeks vektor dan fungsi tersebut VECTOR_SEARCH masih dalam pratinjau dan dapat berubah. Untuk menggunakan fitur ini, Anda harus mengaktifkan PREVIEW_FEATURESkonfigurasi cakupan database.
Periksa batasan saat ini sebelum menggunakannya.
Nota
Versi terbaru dari indeks vektor tersedia dalam Azure SQL Database, database SQL dalam Microsoft Fabric, dan Azure SQL Managed Instance dengan kebijakan pembaruan Always-up-to-date.
Sintaksis
CREATE VECTOR INDEX index_name
ON object ( vector_column )
[ WITH (
[ , ] METRIC = { 'cosine' | 'dot' | 'euclidean' }
[ [ , ] TYPE = 'DiskANN' ]
[ [ , ] MAXDOP = max_degree_of_parallelism ]
) ]
[ 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
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
Jenis algoritma ANN yang digunakan untuk membangun indeks. Hanya DiskANN yang saat ini didukung. DiskANN adalah nilai default.
MAXDOP
Mengambil alih tingkat maksimum opsi konfigurasi paralelisme untuk operasi indeks. Untuk informasi selengkapnya, lihat konfigurasi server : 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:
1Menonaktifkan pembuatan rencana paralel.
>
1Membatasi 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.
Operasi indeks paralel tidak tersedia di setiap edisi SQL Server. Untuk daftar fitur yang didukung oleh edisi di SQL Server, lihat Edisi dan fitur yang didukung dari SQL Server 2025.
Meningkatkan indeks vektor ke versi terbaru
Penting
Pemberitahuan penghentian: Rilis saat ini mendukung indeks vektor yang dibuat dengan menggunakan struktur data sebelumnya, tetapi versi mendatang akan menghentikan dukungan tersebut. Untuk memastikan kompatibilitas di masa depan dan akses ke kemampuan pencarian vektor terbaru, migrasikan indeks vektor yang sudah ada dengan menggunakan langkah-langkah berikut.
Indeks vektor yang baru dibuat secara otomatis menggunakan struktur data terbaru, yang menyediakan:
-
Dukungan DML penuh: Menghapus batasan sebelumnya yang membuat tabel yang diindeks vektor baca-saja setelah pembuatan indeks. Anda sekarang dapat melakukan
INSERToperasi ,UPDATE,DELETE, danMERGEsambil mempertahankan fungsi indeks vektor dengan pemeliharaan indeks otomatis secara real-time. -
Penyaringan iteratif: Menerapkan predikat dalam
WHEREklausa selama proses pencarian vektor, bukan setelah pengambilan. - Optimizer-driven: Query optimizer secara otomatis menentukan apakah akan menggunakan indeks DiskANN atau pencarian kNN berdasarkan karakteristik query.
- Kuantisasi lanjutan: Mengintegrasikan teknik kuantisasi vektor untuk memberikan efisiensi penyimpanan yang lebih baik dan performa kueri yang lebih cepat. Optimasi ini transparan bagi pengguna.
Untuk detail tentang batasan versi indeks vektor sebelumnya, lihat bagian Keterbatasan dan pertimbangan.
Migrasi dari versi indeks vektor sebelumnya
Untuk mengaktifkan kemampuan terbaru, Anda harus menghapus dan membuat ulang indeks vektor yang menggunakan versi sebelumnya. Bagian ini menjelaskan cara mengidentifikasi, memigrasikan, dan memverifikasi versi indeks vektor.
Langkah 1: Identifikasi indeks vektor yang ada
Gunakan kueri berikut untuk mengidentifikasi indeks vektor yang memerlukan migrasi:
SELECT
i.name AS index_name,
t.name AS table_name,
JSON_VALUE(v.build_parameters, '$.Version') AS index_version,
CASE
WHEN JSON_VALUE(v.build_parameters, '$.Version') >= '3'
THEN 'Uses latest version (no migration required)'
WHEN JSON_VALUE(v.build_parameters, '$.Version') < '3'
THEN 'Created using an earlier version (migration recommended)'
ELSE 'Unknown format'
END AS migration_status
FROM sys.vector_indexes AS v
INNER JOIN sys.indexes AS i
ON v.object_id = i.object_id
AND v.index_id = i.index_id
INNER JOIN sys.tables AS t
ON v.object_id = t.object_id
ORDER BY t.name, i.name;
Cara menafsirkan hasilnya
Menggunakan versi terbaru
- Sudah mendukung penyaringan iteratif, dukungan DML penuh, eksekusi berbasis optimizer, dan kuantisasi yang ditingkatkan.
- Tidak diperlukan migrasi.
Dibuat menggunakan versi yang lebih lama
- Menggunakan perilaku post-filter lama.
- Tidak mendukung kemampuan pencarian vektor terbaru.
- Migrasi sangat dianjurkan untuk memastikan kompatibilitas di masa depan.
Langkah 2: Jatuhkan dan buat ulang indeks vektor
Anda tidak bisa meningkatkan indeks vektor yang menggunakan format sebelumnya. Untuk mengaktifkan kemampuan DiskANN terbaru, hilangkan dan buat ulang indeks.
Peringatan
Dampak layanan: Menghilangkan indeks vektor segera menonaktifkan perkiraan pencarian vektor pada tabel yang terpengaruh hingga indeks dibuat ulang. Merencanakan migrasi selama jendela pemeliharaan untuk sistem produksi.
Menghilangkan indeks yang ada
DROP INDEX vec_idx ON dbo.wikipedia_articles;
Membuat ulang indeks
CREATE VECTOR INDEX vec_idx
ON dbo.wikipedia_articles (title_vector)
WITH (
TYPE = 'DISKANN',
METRIC = 'COSINE'
);
Nota
Indeks vektor yang dibuat dengan menggunakan pernyataan saat ini CREATE VECTOR INDEX secara otomatis menggunakan format DiskANN terbaru. Tidak diperlukan opsi atau bendera tambahan.
Langkah 3: Verifikasi versi indeks
Setelah Anda membuat ulang indeks, pastikan bahwa menggunakan versi terbaru:
SELECT
i.name AS index_name,
t.name AS table_name,
JSON_VALUE(v.build_parameters, '$.Version') AS index_version
FROM sys.vector_indexes AS v
INNER JOIN sys.indexes AS i
ON v.object_id = i.object_id
AND v.index_id = i.index_id
INNER JOIN sys.tables AS t
ON v.object_id = t.object_id
WHERE i.name = 'vec_idx';
Kolom index_version harus ditampilkan 3 untuk versi terbaru.
Perilaku kesalahan dengan ketidaksesuaian versi
Jika Anda mencoba menggunakan TOP_N parameter dengan VECTOR_SEARCH indeks vektor versi terbaru, SQL Server mengembalikan kesalahan berikut:
Msg 42274, Level 16, State 1
Vector search with version 3 index does not support explicit TOP_N parameter.
Untuk mengatasi kesalahan ini, hapus TOP_N parameter dari VECTOR_SEARCH dan gunakan sintaks sebagai gantinya SELECT TOP (N) WITH APPROXIMATE . Untuk informasi mendetail, lihat Kesalahan menggunakan sintaksis warisan.
Batasan dan pertimbangan
Batasan versi indeks vektor sebelumnya
Versi indeks vektor sebelumnya memiliki keterbatasan sebagai berikut. Untuk memeriksa versi indeks Anda, lihat Memverifikasi versi indeks.
Hanya setelah penyaringan: Predikat hanya berlaku setelah pengambilan vektor, bukan selama proses pencarian. Perilaku ini dapat menghasilkan lebih sedikit baris yang dikembalikan dari yang diharapkan saat Anda menerapkan filter.
Tabel baca-saja: Tabel dengan indeks vektor bersifat baca-saja. Anda tidak dapat melakukan operasi DML (
INSERT,UPDATE, ,DELETEMERGE) setelah membuat indeks vektor.ALLOW_STALE_VECTOR_INDEXGunakan konfigurasi cakupan database untuk mengaktifkan operasi DML jika Anda dapat mentolerir hasil pencarian kedaluarsa.Penyetelan TOP_N manual: Anda harus mengatur
TOP_Nparameter secaraVECTOR_SEARCHmanual untuk mengkompensasi pasca-filter. Seringkali Anda membutuhkan nilai yang terlalu besar untuk mendapatkan jumlah hasil yang diinginkan.Tabel harus memiliki indeks utama yang dikelompokkan pada kolom int .
Batasan saat ini (berlaku untuk versi terbaru juga)
Pratinjau saat ini memiliki batasan berikut:
Anda tidak bisa mempartisi indeks vektor.
Indeks vektor tidak direplikasi ke pelanggan.
Anda tidak bisa memotong tabel dengan indeks vektor dengan menggunakan
TRUNCATE TABLE. Untuk menghapus semua data, jatuhkan indeks vektor terlebih dahulu, potong tabel, repopulasi dengan setidaknya 100 baris, lalu buat ulang indeks. Untuk informasi selengkapnya, lihat TRUNCATE TABLE pembatasan.Indeks vektor tidak dapat diterapkan dengan DacPac. Anda dapat mendistribusikan database yang berisi indeks vektor dengan BACPAC mulai dari DacFx versi 170.5.96. Indeks vektor dibuat setelah data tabel dimuat, dan tabel terindeks harus berisi setidaknya 100 baris dengan nilai non-vektor
NULL.Selama penerapan DACPAC hanya skema, penerapan dapat berhasil tanpa membuat indeks vektor jika tabel target berisi kurang dari 100 baris dengan nilai non-vektor
NULL. DacFx tidak secara otomatis membuat indeks yang dilewati ketika baris ditambahkan kemudian. Setelah memuat setidaknya 100 baris yang memenuhi syarat, buat indeks vektor dengan menggunakan skrip pasca-deployment, publikasikan DACPAC lagi, atau jalankanCREATE VECTOR INDEX.Setelah impor atau deployment, verifikasi bahwa indeks vektor dibuat dengan melakukan
sys.vector_indexeskueri .Sebagai solusi sebelum DacFx versi 170.5.96, hapus indeks vektor sebelum mengekspor database, dan buat ulang indeks setelah impor.
Persyaratan data minimum
Indeks vektor membutuhkan jumlah baris minimum dengan nilai non-vektorNULL sebelum Anda dapat membuat indeks.
-
Jumlah baris minimum: Tabel harus memiliki setidaknya 100 baris dengan nilai non-vektor
NULL. - Perilaku error: Jika Anda mencoba membuat indeks vektor pada tabel dengan kurang dari 100 baris, operasi gagal dan mengembalikan error Msg 42266.
Contoh kesalahan:
Msg 42266, Level 16, State 1
Cannot create a vector index. The table contains only 8 rows with non-null vectors,
but at least 100 are required for vector index creation.
Praktik terbaik: Isi tabel dengan setidaknya 100 baris sebelum membuat indeks vektor. Untuk skenario pengembangan dan pengujian di mana Anda membutuhkan lebih sedikit baris, VECTOR_SEARCH ini bekerja tanpa indeks dengan menggunakan pendekatan pemindaian brute-force. Namun, metode ini menurunkan performa dengan dataset yang lebih besar.
Dukungan DML
Ketika Anda membuat indeks vektor DiskANN menggunakan versi terbaru, tabel tersebut tidak lagi hanya-baca. Anda dapat memodifikasi data dengan menggunakan operasi bahasa manipulasi data standar (DML), dan perubahan tersebut secara otomatis muncul dalam hasil pencarian vektor.
Kemampuan ini membuat pencarian vektor cocok untuk beban kerja langsung dan transaksi di mana data berubah dari waktu ke waktu.
Catatan perilaku
- Operasi DML tidak memerlukan penghapusan atau pembangunan kembali indeks vektor.
- Perubahan terlihat oleh kueri pencarian vektor setelah transaksi diterapkan.
- Untuk penggantian data skala besar (misalnya, menghapus sebagian besar baris dan menyisipkan sekumpulan penyematan yang sama sekali baru), pertimbangkan untuk menghilangkan dan membuat ulang indeks vektor setelah pemuatan data untuk memastikan kualitas pencarian yang optimal.
Nota
Dukungan DML hanya tersedia dengan indeks vektor yang dibuat menggunakan versi terbaru. Versi sebelumnya mengharuskan tabel bersifat baca-saja atau menggunakan ALLOW_STALE_VECTOR_INDEX konfigurasi cakupan database.
Memantau pemeliharaan indeks vektor
Indeks vektor melakukan pemeliharaan latar belakang untuk menggabungkan perubahan DML. Gunakan tampilan manajemen dinamis sys.dm_db_vector_indexes untuk memantau status tugas kesehatan dan pemeliharaan indeks.
Menggabungkan indeks vektor dengan indeks tradisional
Indeks vektor bekerja bersama indeks pohon B tradisional untuk memberikan performa kueri yang optimal. Saat menggunakan pemfilteran berulang dengan VECTOR_SEARCH, pertimbangkan untuk membuat indeks tradisional pada kolom yang digunakan dalam predikat filter.
Untuk informasi terperinci tentang perilaku pemfilteran berulang dan perbedaannya dengan versi sebelumnya, lihat Perilaku pemfilteran berulang.
Petunjuk / Saran
Pengoptimal kueri secara otomatis memilih strategi eksekusi terbaik (perkiraan indeks tetangga terdekat vs. pencarian kNN). Untuk memaksa penggunaan perkiraan indeks tetangga terdekat, gunakan FORCE_ANN_ONLY petunjuk tabel. Untuk informasi selengkapnya, lihat Petunjuk tabel untuk pencarian vektor.
Contoh skenario:
-- Create vector index for similarity search
CREATE VECTOR INDEX idx_embeddings_vector
ON product_embeddings(embedding)
WITH (METRIC = 'cosine');
-- Create traditional index for filter columns
CREATE NONCLUSTERED INDEX idx_embeddings_filters
ON product_embeddings(category);
Manfaat performa:
Saat menjalankan kueri dengan pemfilteran berulang, pengoptimal kueri SQL Server menggunakan kedua jenis indeks:
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'wireless headphones' USE MODEL EmbeddingModel);
SELECT TOP (10) WITH APPROXIMATE
p.name,
p.price,
vs.distance
FROM products p
INNER JOIN VECTOR_SEARCH(
TABLE = product_embeddings AS e,
COLUMN = embedding,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS vs ON p.id = e.product_id
WHERE e.approved = 1
AND e.category = 'Electronics' -- Can use traditional index
ORDER BY vs.distance;
Dalam kueri ini:
- Indeks vektor mengidentifikasi penyematan serupa berdasarkan vektor kueri
-
Indeks tradisional pada
(category)filter kandidat secara efisien selama proses pencarian berulang
Strategi komposit ini dapat meningkatkan performa kueri secara signifikan dibandingkan dengan hanya menggunakan indeks vektor, terutama ketika predikat filter memiliki selektivitas tinggi.
Panduan kualitas dan pemeliharaan data untuk indeks vektor
Hindari himpunan data dengan penyematan duplikat tinggi
Pengindeksan vektor berfungsi paling baik saat penyematan mewakili beragam konten semantik. Jangan gunakan dataset dengan proporsi vektor duplikat yang tinggi untuk pengindeksan vektor.
Duplikasi tinggi dapat menyebabkan:
- Kualitas hasil yang buruk: Vektor duplikat muncul berulang kali dalam hasil, memadati kecocokan semantik yang lebih relevan.
- Pengurangan efektivitas: Penyematan duplikat menggantikan tetangga yang lebih baik, menurunkan kegunaan pencarian kesamaan.
- Penggunaan sumber daya yang tidak perlu: Indeks vektor mahal untuk membangun dan memelihara, dan duplikat menambahkan biaya tanpa menambahkan nilai.
Praktik terbaik: Menyematkan penyematan Deduplikasi sebelum membuat indeks vektor untuk meningkatkan performa dan kualitas hasil.
Skenario penggantian data skala besar
Indeks vektor mendukung penyisipan, pembaruan, dan penghapusan. Namun, ketika Anda mengganti sebagian besar atau semua embedding—misalnya, melakukan re-embedding dataset dengan model baru—indeks yang ada mungkin tidak lagi mencerminkan distribusi data baru.
Dalam skenario penggantian skala besar:
- Kueri pencarian vektor terus mengembalikan hasil yang valid.
- Kualitas recall dan peringkat mungkin menurun, karena struktur indeks dibuat untuk distribusi embedding yang berbeda.
Praktik terbaik: Saat melakukan penggantian data yang hampir lengkap (hapus dan sisipkan penyematan baru), jatuhkan dan buat ulang indeks vektor setelah memuat data baru. Membuat ulang indeks memastikan indeks dioptimalkan untuk distribusi penyematan baru dan memulihkan perilaku kueri yang dapat diprediksi.
Masalah yang diketahui
Untuk informasi selengkapnya, tinjau Masalah yang diketahui.
Hak akses
Kamu butuh ALTER izin di atas meja.
Contoh
Unduh dan impor artikel Wikipedia dengan sampel penyematan vektor .
Contoh-contoh ini mengasumsikan tabel yang dinamai wikipedia_articles dengan kolom title_vector tipe yang vector menyimpan penyisipan judul artikel Wikipedia. Model ini title_vector menggunakan model embedding seperti text-embedding-ada-002 atau text-embedding-3-small, yang mengembalikan vektor dengan 1.536 dimensi.
Untuk contoh lebih lanjut, termasuk solusi end-to-end, lihat repo GitHub Azure SQL Database Vector Search Samples.
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 ). Ia membatasi paralelisme hingga 8 dan menyimpan vektor di SECONDARY filegroup.
CREATE VECTOR INDEX vec_idx
ON [dbo].[wikipedia_articles] ([title_vector])
WITH (METRIC = 'DOT', TYPE = 'DISKANN', MAXDOP = 8)
ON [SECONDARY];
Contoh 3
Contoh ini menggunakan CREATE VECTOR INDEX dan fungsi terkait VECTOR_SEARCH . Penyematan dititipkan. Dalam skenario dunia nyata, hasilkan embedding menggunakan model embedding dan AI_GENERATE_EMBEDDINGS, atau gunakan pustaka eksternal seperti OpenAI SDK.
Nota
Indeks vektor versi terbaru memerlukan setidaknya 100 baris data sebelum Anda dapat membuat indeks. Contoh ini menyisipkan 100 baris untuk memenuhi persyaratan ini. Untuk informasi selengkapnya, lihat Persyaratan data minimum.
Blok kode berikut menunjukkan CREATE VECTOR INDEX dengan penyematan tiruan:
- Aktifkan fitur pratinjau (hanya diperlukan untuk SQL Server 2025; tidak diperlukan untuk Azure SQL Database atau database SQL di Fabric).
- Buat tabel
dbo.Articlessampel dengan kolomembeddingdengan vektor tipe data(5). - Sisipkan 100 baris data sampel dengan data penyematan tiruan.
- Buat indeks vektor pada
dbo.Articles.embedding. - Menunjukkan pencarian kesamaan vektor dengan
VECTOR_SEARCHfungsi .
-- Step 0: Enable Preview Feature (SQL Server 2025 only)
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
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
);
GO
-- Step 2: Insert sample data (100 rows required for latest version indexes)
INSERT INTO Articles (id, title, content, embedding)
SELECT
value AS id,
'Article ' || [value],
'Content for article ' || [value],
CAST(JSON_ARRAY(
CAST(value * 0.01 AS FLOAT),
CAST(value * 0.02 AS FLOAT),
CAST(value * 0.03 AS FLOAT),
CAST(value * 0.04 AS FLOAT),
CAST(value * 0.05 AS FLOAT)
) AS VECTOR(5))
FROM GENERATE_SERIES(1, 100);
GO
-- Step 3: Create a vector index on the embedding column
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (METRIC = 'cosine', TYPE = 'diskann');
GO
-- Step 4: Perform a vector similarity search
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP(3) WITH APPROXIMATE
t.id,
t.title,
t.content,
s.distance
FROM
VECTOR_SEARCH(
TABLE = Articles AS t,
COLUMN = embedding,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS s
ORDER BY s.distance, t.title;
Sintaks untuk kueri bergantung pada versi indeks vektor:
| Versi indeks vektor | Contoh sintaksis |
|---|---|
| Versi terbaru | Gunakan SELECT TOP (N) WITH APPROXIMATE tanpa TOP_N parameter |
| Versi sebelumnya (tidak digunakan lagi) | Gunakan TOP_N parameter dalam VECTOR_SEARCH fungsi |
Untuk indeks versi yang lebih lama (sintaksis yang tidak digunakan lagi):
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP(3)
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;
Contoh 4: Bekerja dengan operasi DML
Contoh berikut menunjukkan operasi DML pada tabel dengan indeks vektor yang dibuat menggunakan versi terbaru.
Menghapus baris
Menghapus baris akan menghapusnya dari tabel dan hasil pencarian vektor.
DELETE FROM dbo.wikipedia_articles
WHERE id = 12345;
Setelah operasi penghapusan selesai, baris yang dihapus tidak lagi muncul dalam kueri pencarian vektor.
Sisipkan baris baru
Anda dapat menyisipkan baris baru dengan penyematan, dan baris tersebut menjadi segera dapat dicari tanpa membangun ulang indeks.
INSERT INTO dbo.wikipedia_articles (id, title, title_vector)
VALUES (
99999,
N'Quantum Computing Basics',
AI_GENERATE_EMBEDDINGS(N'Quantum Computing Basics' USE MODEL Ada2Embeddings)
);
Penyematan yang baru disisipkan secara otomatis dimasukkan ke dalam indeks vektor dan dapat dikembalikan oleh kueri pencarian vektor berikutnya.
Memperbarui baris yang sudah ada
Memperbarui kolom vektor atau non-vektor didukung sepenuhnya.
DECLARE @new_embedding VECTOR(1536);
SET @new_embedding = AI_GENERATE_EMBEDDINGS(N'Updated article title' USE MODEL Ada2Embeddings);
UPDATE dbo.wikipedia_articles
SET title_vector = @new_embedding,
title = N'Updated article title'
WHERE id = 50000;
Jika Anda memperbarui kolom vektor, indeks akan diperbarui sesuai sehingga pencarian vektor di masa depan menggunakan embedding baru.
Gunakan MERGE untuk operasi yang kompleks
Pernyataan ini MERGE memungkinkan Anda melakukan operasi sisipkan, perbarui, dan hapus dalam satu pernyataan.
MERGE INTO dbo.wikipedia_articles AS target
USING (
SELECT
id,
title,
AI_GENERATE_EMBEDDINGS(title USE MODEL Ada2Embeddings) AS title_vector
FROM dbo.staging_articles
) AS source
ON target.id = source.id
WHEN MATCHED THEN
UPDATE SET
title = source.title,
title_vector = source.title_vector
WHEN NOT MATCHED BY TARGET THEN
INSERT (id, title, title_vector)
VALUES (source.id, source.title, source.title_vector)
WHEN NOT MATCHED BY SOURCE AND target.id > 100000 THEN
DELETE;
Indeks vektor secara otomatis diperbarui untuk mencerminkan semua perubahan yang dilakukan oleh pernyataan tersebut MERGE .