Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygulandığı yer: SQL Server 2025 (17.x)
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
En yakın komşu aramalarının performansını artırmak için bir vektör sütununda yaklaşık bir indeks oluşturun. Vektör indeksleme ve vektör aramasının nasıl çalıştığı ve kesin ile yaklaşık arama arasındaki farklar hakkında daha fazla bilgi edinmek için SQL Database Engine'deki Vektör arama ve vektör indekslerine bakınız.
Özellik kullanılabilirliği
- Vektör indeksi ve
VECTOR_SEARCHAzure SQL Veritabanı'de genel olarak erişilebilir (GA), Microsoft Fabric'de SQL veritabanı ve Azure SQL Yönetilen Örneği her zamanup-totarihgüncelleme politikasıyla mevcuttur. - Vector index ve
VECTOR_SEARCHSQL Server 2025 (17.x) ve Azure SQL Yönetilen Örneği'da SQL Server 2025 güncelleme politikasıyla önizleme özellikleridir.
Uyarı
Kullanımdan çıkarma bildirimi: Daha önceki bir veri yapısı kullanılarak oluşturulan vektör indeksleri mevcut sürümde desteklenmekte olmakla birlikte, gelecekteki bir sürümde emekliye kaldırılacaktır. Gelecekteki uyumluluk ve en son vektör arama yeteneklerine erişim sağlamak için, mevcut vektör indekslerini Önceki vektör indeks sürümlerinden geçiş bölümündeki adımları kullanarak taşıyın.
SQL Server 2025 önizleme özelliği
SQL Server 2025 ve Azure SQL Yönetilen Örneği'ta SQL Server 2025güncelleme politikasında, vektör indeksleri ve VECTOR_SEARCH fonksiyon önizleme aşamasındadır ve değişebilir. Bu özelliği kullanmak için veritabanı kapsamlı yapılandırmayı etkinleştirmeniz PREVIEW_FEATURES gerekir.
Kullanmadan önce mevcut sınırlamaları kontrol edin.
Uyarı
Vektör indekslerinin en son sürümü Azure SQL Veritabanı'de, SQL veritabanı Microsoft Fabric'de ve Azure SQL Yönetilen Örneği up-to tarih güncelleme politikasıyla mevcuttur.
Sözdizimi
Transact-SQL söz dizimi kuralları
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" } ]
[;]
Tartışmalar
index_name
Dizinin adı. Dizin adlarının bir tablo içinde benzersiz olması gerekir, ancak veritabanında benzersiz olması gerekmez. Dizin adları tanımlayıcıların kurallarına uymalıdır.
nesne
Dizinin oluşturulduğu tablo. Temel tablo olmalıdır. Hem yerel hem de genel görünümler, geçici tablolar desteklenmez.
vector_column
Vektör dizinini oluşturmak için kullanılacak sütun. Vektör türünde olmalıdır.
METRİK
Verilen iki vektör arasındaki uzaklığı hesaplamak için kullanılacak uzaklık ölçümünün adını içeren bir dize. Aşağıdaki uzaklık ölçümleri desteklenir:
-
cosine- Kosinüs uzaklığı -
euclidean- Öklid uzaklığı -
dot- (Negatif) Noktalı ürün
TYPE
Dizini oluşturmak için kullanılan ANN algoritmasının türü. Şu anda yalnızca DiskANN desteklenmektedir. DiskANN varsayılan değerdir.
MAXDOP
Dizin işlemi için en yüksek paralellik derecesi yapılandırma seçeneğini geçersiz kılar. Daha fazla bilgi için bkz. Sunucu yapılandırması: en yüksek paralellik derecesi. Bir dizin derleme işlemi için paralellik derecesini ve sonuçta elde edilen kaynak tüketimini sınırlamak için kullanın MAXDOP .
max_degree_of_parallelism olabilir:
1Paralel plan oluşturmayı bastırır.
>
1Paralel dizin işleminde kullanılan en yüksek paralellik derecesini, geçerli sistem iş yüküne göre belirtilen sayıyla veya daha az değerle kısıtlar.
0(varsayılan)Geçerli sistem iş yüküne göre azaltılmadığı sürece sunucu, veritabanı veya iş yükü grubu düzeyinde belirtilen paralellik derecesini kullanır.
Daha fazla bilgi için bkz . Paralel dizin işlemlerini yapılandırma.
Paralel dizin işlemleri SQL Server'ın her sürümünde kullanılamaz. SQL Server'daki sürümler tarafından desteklenen özelliklerin listesi için bkz. SQL Server 2025'in Sürümleri ve desteklenen özellikleri.
Vektör dizinlerini en son sürüme yükseltme
Önemli
Kullanımdan çıkarma bildirimi: Mevcut sürüm, önceki veri yapısı kullanılarak oluşturulan vektör indekslerini destekler, ancak gelecekteki sürümde bu destek kaldırılacaktır. Gelecekteki uyumluluk ve en son vektör arama yeteneklerine erişim sağlamak için, mevcut vektör indekslerini aşağıdaki adımlarla taşın.
Yeni oluşturulan vektör dizinleri otomatik olarak en son veri yapısını kullanır ve bu da şunları sağlar:
-
Tam DML desteği: Dizin oluşturulduktan sonra vektör dizinli tabloları salt okunur yapan önceki sınırlamayı kaldırır. Artık
INSERT,UPDATE,DELETE, veMERGEişlemleri gerçekleştirerek vektör indeksi işlevselliğini otomatik ve gerçek zamanlı indeks bakımıyla koruyabilirsiniz. -
Yinelemeli filtreleme: Vektör arama sürecinde cümledeki önlemleri
WHEREuygular, başvurudan sonra değil. - Optimizer odaklı: Sorgu optimizleyicisi, sorgu özelliklerine göre DiskANN indeksi veya kNN araması kullanılıp kullanılmayacağına otomatik olarak karar verir.
- İleri kuantizasyon: Daha iyi depolama verimliliği ve daha hızlı sorgu performansı sağlamak için vektör kuantizasyon tekniklerini entegre eder. Bu optimizasyonlar kullanıcılar için şeffaftır.
Önceki vektör indeks sürüm sınırlamaları hakkında detaylar için Sınırlamalar ve Dikkate Alınanlar bölümüne bakınız.
Önceki vektör dizini sürümlerinden geçiş
En son yetenekleri etkinleştirmek için, önceki bir versiyonu kullanan vektör indekslerini bırakıp yeniden oluşturmalısınız. Bu bölümde vektör dizini sürümlerini tanımlama, geçirme ve doğrulama açıklanmaktadır.
1. Adım: Mevcut vektör dizinlerini tanımlama
Geçiş gerektiren vektör dizinlerini tanımlamak için aşağıdaki sorguyu kullanın:
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;
Sonuçları yorumlama
En son sürümü kullanır
- Zaten yinelemeli filtreleme, tam DML desteği, optimizer odaklı yürütme ve geliştirilmiş kuantizasyonu destekliyor.
- Geçiş gerekmez.
Önceki bir sürüm kullanılarak oluşturuldu
- Eski filtre sonrası davranışı kullanıyor.
- En son vektör arama yeteneklerini desteklemiyor.
- Gelecekteki uyumluluk için göç kesinlikle tavsiye edilir.
2. Adım: Vektör dizinini bırakma ve yeniden oluşturma
Daha önceki bir format kullanan vektör indekslerini yükseltemezsiniz. En son DiskANN özelliklerini etkinleştirmek için dizini bırakın ve yeniden oluşturun.
Uyarı
Hizmet etkisi: Vektör dizininin bırakılması, dizin yeniden oluşturulana kadar etkilenen tabloda yaklaşık vektör aramasını hemen devre dışı bırakır. Üretim sistemleri için bakım pencereleri sırasında geçişleri planlayın.
Mevcut dizini bırakma
DROP INDEX vec_idx ON dbo.wikipedia_articles;
Dizini yeniden oluşturma
CREATE VECTOR INDEX vec_idx
ON dbo.wikipedia_articles (title_vector)
WITH (
TYPE = 'DISKANN',
METRIC = 'COSINE'
);
Uyarı
Mevcut CREATE VECTOR INDEX ifadeyle oluşturulan vektör indeksleri otomatik olarak en son DiskANN formatını kullanır. Ek seçenek veya bayrak gerekmez.
3. Adım: Dizin sürümünü doğrulama
İndeks yeniden oluşturduktan sonra, en son sürümü kullandığından emin olun:
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';
Sütunun index_version en son sürüm için görüntülenmesi 3 gerekir.
Sürüm uyumsuzluğuyla ilgili hata davranışı
parametresini TOP_NVECTOR_SEARCH en son sürüm vektör diziniyle kullanmaya çalışırsanız, SQL Server aşağıdaki hatayı döndürür:
Msg 42274, Level 16, State 1
Vector search with version 3 index does not support explicit TOP_N parameter.
Bu hatayı çözmek için parametresini TOP_NVECTOR_SEARCH kaldırın ve bunun yerine söz dizimini SELECT TOP (N) WITH APPROXIMATE kullanın. Ayrıntılı bilgi için bkz. Eski söz dizimi kullanılırken hata oluştu.
Sınırlamalar ve Dikkat Edilecek Hususlar
Önceki vektör dizini sürüm sınırlamaları
Önceki vektör indeks versiyonlarının aşağıdaki sınırlamaları vardır. Dizin sürümünüzü denetlemek için bkz. Dizin sürümünü doğrulama.
Sadece filtreleme sonrası seçim: Önlemler yalnızca vektör başvurusundan sonra uygulanır, arama sürecinde değil. Bu davranış, filtre uyguladığınızda beklenenden daha az satır geri dönmesine yol açabilir.
Salt okunur tablolar: Vektör dizinleri olan tablolar salt okunur durumdadır. Vektör indeksi oluşturulduktan sonra DML işlemlerini (
INSERT,UPDATE,DELETE,MERGE, ) gerçekleştiremezsiniz.ALLOW_STALE_VECTOR_INDEXEski arama sonuçlarını tolere edebilirseniz DML işlemlerini etkinleştirmek için veritabanı kapsamlı yapılandırmasını kullanın.Manuel TOP_N ayarlama: Filtreleme sonrası parametreyi
VECTOR_SEARCHelle ayarlamanızTOP_Ngerekir. İstenilen sayıda sonucu almak için genellikle büyük değerlere ihtiyacınız olur.
Geçerli sınırlamalar (en son sürüm için de geçerlidir)
Geçerli önizlemede aşağıdaki sınırlamalar vardır:
Vektör indekslerini bölmek mümkün değil.
Tablo, bir ökreleme sütununda birincil anahtar kümelenmiş bir indekse sahip olmalıdır.
Vektör dizinleri abonelere çoğaltılamaz.
Vektör indeksli tabloları kısamazsınız.
TRUNCATE TABLETüm verileri kaldırmak için, önce vektör dizinini bırakın, tabloyu kırpın, en az 100 satırla yeniden doldurularak dizini yeniden oluşturun. Daha fazla bilgi için kısıtlamalara bakınızTRUNCATE TABLE.Vektör indeksleri DacPac ile dağıtılamaz. DacFx sürüm 170.5.96 ile başlayan BACPAC ile vektör indeksleri içeren veritabanları dağıtabilirsiniz. Vektör indeksleri, tablo verileri yüklendikten sonra oluşturulur ve indekslenen tabloda en az 100 satır vektör olmayan
NULLdeğerler içermelidir.Yalnızca şema tabanlı DACPAC dağıtımı sırasında, hedef tabloda vektör olmayan değerlere sahip 100 satırdan
NULLaz varsa, vektör indeksi oluşturmadan dağıtım başarılı olabilir. DacFx, satırlar daha sonra eklendiğinde otomatik olarak atlanan indeks oluşturmaz. En az 100 nitelikli satır yüklendikten sonra, vektör indeksini dağıtım sonrası bir betik kullanarak oluşturun, DACPAC'ı tekrar yayınlayın veya çalıştırınCREATE VECTOR INDEX.Bir içe aktarma veya dağıtımdan sonra, vektör indeksinin oluşturulduğunu sorgulayarak
sys.vector_indexesdoğrulayın.DacFx sürüm 170.5.96'dan önce bir çözüm olarak, veritabanını dışa aktarmadan önce vektör indekslerini bırakın ve içe aktardıktan sonra indeksleri yeniden oluşturun.
En düşük veri gereksinimleri
Vektör indeksleri, indeks oluşturmak için vektör olmayanNULL değerlere sahip minimum satır sayısı gerektirir.
-
Minimum satır sayısı: Tabloda en az 100 satır ve vektör olmayan
NULLdeğerler bulunmalıdır. - Hata davranışı: 100 satırdan az olan bir tabloda vektör indeksi oluşturmaya çalışırsanız, işlem başarısız olur ve Msg 42266 hatası döner.
Örnek hatası:
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.
En iyi yöntem: Vektör dizinini oluşturmadan önce tabloyu en az 100 satırla doldurun. Daha az satır gerektiren geliştirme ve test senaryoları için, VECTOR_SEARCH brute-force tarama yöntemiyle indeks olmadan çalışır. Ancak, bu yöntem daha büyük veri setlerinde performansı düşürür.
DML desteği
En son sürümü kullanarak bir DiskANN vektör indeksi oluşturduğunuzda, tablo artık sadece okunabilir değildir. Standart veri işleme dili (DML) işlemlerini kullanarak veriyi değiştirebilirsiniz ve değişiklikler vektör arama sonuçlarında otomatik olarak görünür.
Bu özellik, vektör aramasını verilerin zaman içinde değiştiği canlı, işlemsel iş yükleri için uygun hale getirir.
Davranış notları
- DML işlemleri vektör dizininin bırakılıp yeniden oluşturulmasını gerektirmez.
- Değişiklikler, işlem işlemelerinden sonra vektör arama sorgularında görünür.
- Büyük ölçekli veri değişimi için (örneğin, çoğu satırı silme ve tamamen yeni bir ekleme kümesi ekleme), en iyi arama kalitesini sağlamak için veri yükünden sonra vektör dizinini bırakıp yeniden oluşturmayı göz önünde bulundurun.
Uyarı
DML desteği yalnızca en son sürüm kullanılarak oluşturulan vektör indeksleriyle mevcuttur. Önceki sürümler tabloların salt okunur olmasını veya veritabanı kapsamlı yapılandırmasını kullanmasını ALLOW_STALE_VECTOR_INDEX gerektirir.
İzleme vektör dizini bakımı
Vektör dizinleri, DML değişikliklerini birleştirmek için arka plan bakımı gerçekleştirir. Dizin durumunu ve bakım görevi durumunu izlemek için sys.dm_db_vector_indexes dinamik yönetim görünümünü kullanın.
Vektör dizinlerini geleneksel dizinlerle birleştirme
Vektör dizinleri, en iyi sorgu performansını sağlamak için geleneksel B ağacı dizinleri ile birlikte çalışır. ile VECTOR_SEARCHyinelemeli filtreleme kullanırken, filtre koşullarında kullanılan sütunlarda geleneksel dizinler oluşturmayı göz önünde bulundurun.
Yinelemeli filtreleme davranışı ve önceki sürümlerden farkı hakkında ayrıntılı bilgi için bkz. Yinelemeli filtreleme davranışı.
Tip
Sorgu iyileştirici otomatik olarak en iyi yürütme stratejisini seçer (yaklaşık en yakın komşu dizini ve kNN araması). Yaklaşık en yakın komşu dizininin kullanılmasını zorlamak için tablo ipucunu FORCE_ANN_ONLY kullanın. Daha fazla bilgi için bkz. Vektör araması için tablo ipuçları.
Örnek senaryo:
-- 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);
Performans avantajı:
Yinelemeli filtreleme ile sorgu yürütürken, SQL Server sorgu iyileştiricisi her iki dizin türünü de kullanır:
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;
Bu sorguda:
- Vektör dizini, sorgu vektöre göre benzer eklemeleri tanımlar
- Yinelemeli arama işlemi sırasında adayları verimli bir şekilde filtrelediğinde geleneksel dizin
(category)
Bu bileşik strateji, özellikle filtre koşullarının yüksek seçiciliğe sahip olması halinde yalnızca vektör dizini kullanımına kıyasla sorgu performansını önemli ölçüde iyileştirebilir.
Vektör dizinleri için veri kalitesi ve bakım kılavuzu
Yüksek yinelenen eklemelere sahip veri kümelerinden kaçının
Vektör dizin oluşturma, eklemeler çeşitli anlamsal içeriği temsil ederken en iyi şekilde çalışır. Vektör indeksleme için yüksek oranda tekrarlanan vektör içeren veri setlerini kullanmayın.
Yüksek yineleme şu nedenlere yol açabilir:
- Düşük sonuç kalitesi: Yinelenen vektörler sonuçlarda art arda görünür ve daha ilgili anlamsal eşleşmeler elde eder.
- Daha az etkinlik: Yinelenen eklemeler daha iyi komşuları yerlerinden ederek benzerlik aramasının kullanışlılığını azaltır.
- Gereksiz kaynak kullanımı: Vektör dizinlerinin oluşturulması ve bakımı pahalıdır ve yinelenenler değer eklemeden maliyet ekler.
En iyi yöntem: Hem performansı hem de sonuç kalitesini artırmak için vektör dizini oluşturmadan önce eklemeleri yinelenenleri kaldırma.
Büyük ölçekli veri değiştirme senaryoları
Vektör dizinleri eklemeleri, güncelleştirmeleri ve silmeleri destekler. Ancak, çoğu veya tüm gömmeleri değiştirdiğinizde—örneğin, bir veri setini yeni bir modelle yeniden gömmek—mevcut endeks artık yeni veri dağılımını yansıtmayabilir.
Büyük ölçekli değiştirme senaryolarında:
- Vektör arama sorguları geçerli sonuçlar vermeye devam ediyor.
- Geri çağırma ve sıralama kalitesi düşebilir, çünkü endeks yapısı farklı bir gömüleme dağılımı için oluşturulmuştur.
En iyi yöntem: Neredeyse eksiksiz veri değiştirme işlemi gerçekleştirirken (yeni eklemeleri silin ve ekleyin), yeni verileri yükledikten sonra vektör dizinini bırakın ve yeniden oluşturun. Dizini yeniden oluşturmak, yeni ekleme dağıtımı için iyileştirilmesini sağlar ve tahmin edilebilir sorgu davranışını geri yükler.
Bilinen sorunlar
Daha fazla bilgi için Bkz. Bilinen sorunlar.
İzinler
Masada izin alman lazım ALTER .
Örnekler
Vektör ekleme örneğiyle Wikipedia makalesini indirin ve içeri aktarın.
Bu örnekler, Wikipedia makalelerinin başlık gömülmelerini saklayan bir tür vector sütunlu title_vector bir tablo varsayılırwikipedia_articles.
Metin-gömme-ada-002title_vector veya metin-gömme-3-small gibi bir göme modeli kullanır ve 1.536 boyutlu vektörler döndürür.
Daha fazla örnek için, uçtan uca çözümler de dahil olmak üzere, Azure SQL Veritabanı Vector Search Samples GitHub reposuna bakınız.
Örnek 1
Aşağıdaki örnek, ölçümü kullanarak title_vector sütunda cosine bir vektör dizini oluşturur.
CREATE VECTOR INDEX vec_idx
ON [dbo].[wikipedia_articles] ([title_vector])
WITH (METRIC = 'COSINE', TYPE = 'DISKANN');
Örnek 2
Aşağıdaki örnek, (negatif) dot çarpım metriğiyle sütun üzerinde title_vector bir vektör indeksi oluşturur. Paralelliği 8 ile sınırlar ve vektörü SECONDARY dosya grubunda saklar.
CREATE VECTOR INDEX vec_idx
ON [dbo].[wikipedia_articles] ([title_vector])
WITH (METRIC = 'DOT', TYPE = 'DISKANN', MAXDOP = 8)
ON [SECONDARY];
Örnek 3
Bu örnek ve ilgili VECTOR_SEARCH fonksiyon kullanılırCREATE VECTOR INDEX. Eklemeler sahtedir. Gerçek bir senaryoda, gömülü modeli ve AI_GENERATE_EMBEDDINGS kullanarak gömülemeler oluşturun veya OpenAI SDK gibi harici bir kütüphane kullanın.
Uyarı
En son versiyon vektör indeksleri için indeks oluşturulabilmek için en az 100 satır veri gerekir. Bu örnek, bu gereksinimi karşılamak için 100 satır ekler. Daha fazla bilgi için bkz. En düşük veri gereksinimleri.
Aşağıdaki kod bloğu sahte eklemelerle gösterilmiştir CREATE VECTOR INDEX :
- Önizleme özelliğini etkinleştirin (sadece SQL Server 2025 için gereklidir; Azure SQL Veritabanı veya Fabric'taki SQL veritabanı için gerekli değildir).
- Veri türü
dbo.Articlesiçeren bir sütunembeddingiçeren örnek tablo oluşturun. - Sahte ekleme verileriyle 100 satır örnek veri ekleyin.
- üzerinde
dbo.Articles.embeddingbir vektör dizini oluşturun. - İşlevle vektör benzerliği aramasını
VECTOR_SEARCHgösterin.
-- 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;
Sorgulama söz dizimi vektör dizini sürümüne bağlıdır:
| Vektör dizini sürümü | Söz dizimi örneği |
|---|---|
| En son sürüm | Parametresiz SELECT TOP (N) WITH APPROXIMATE kullanma TOP_N |
| Önceki sürümler (kullanım dışı) | İşlevde TOP_N parametre kullanma VECTOR_SEARCH |
Önceki sürüm dizinleri için (kullanım dışı söz dizimi):
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;
Örnek 4: DML işlemleriyle çalışma
Aşağıdaki örnekler, en son versiyon kullanılarak oluşturulan vektör indeksine sahip bir tablo üzerindeki DML işlemlerini göstermektedir.
Satırları silme
Satırların silinmesi, bunları hem tablodan hem de vektör arama sonuçlarından kaldırır.
DELETE FROM dbo.wikipedia_articles
WHERE id = 12345;
Silme işlemi tamamlandıktan sonra, kaldırılan satır vektör arama sorgularında görünmez.
Yeni satır ekleme
Eklemelerle yeni satırlar ekleyebilirsiniz ve bunlar dizini yeniden oluşturmadan hemen aranabilir hale gelir.
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)
);
Yeni eklenen eklemeler otomatik olarak vektör dizinine eklenir ve sonraki vektör arama sorguları tarafından döndürülebilir.
Varolan satırları güncelleştirme
Vektör veya vektör olmayan sütunların güncelleştirilmesi tam olarak desteklenir.
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;
Bir vektör sütununu güncellerseniz, indeks buna göre güncellenir ve gelecekteki vektör aramaları yeni gömülü kullanır.
Karmaşık işlemler için kullanım MERGE
deyimi MERGE , tek bir deyimde ekleme, güncelleştirme ve silme işlemleri gerçekleştirmenizi sağlar.
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;
Vektör indeksi, ifadede MERGE yapılan tüm değişiklikleri yansıtacak şekilde otomatik olarak güncellenir.