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.
Şunlar için geçerlidir: SQL Server 2025 (17.x)
Azure SQL Database
SQL database in Microsoft Fabric
En yakın komşu aramasının performanslarını geliştirmek için vektör sütununda yaklaşık bir dizin oluşturun. Vektör dizin oluşturma ve vektör aramanın nasıl çalıştığı ve tam ve yaklaşık arama arasındaki farklar hakkında daha fazla bilgi edinmek için SQL Veritabanı Altyapısı'nda Vektör araması ve vektör dizinleri bölümüne bakın.
Azure SQL Veritabanı ve SQL Veritabanı içinde Fabric
Özellik ön izleme aşamasında. Devam etmeden önce Sınırlamaları ve dikkate alınacak noktaları denetleyin.
Uyarı
Önizleme özelliği olarak, bu makalede sunulan teknoloji Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları'na tabidir.
Uyarı
Kullanımdan kaldırma bildirimi: Önceki bir veri yapısı kullanılarak oluşturulan vektör dizinleri geçerli sürümde desteklenir ancak gelecekteki bir sürümde kullanımdan kaldırılacaktır. Gelecekteki uyumluluk ve en son vektör arama özelliklerine erişim sağlamak için , önceki vektör dizini sürümlerinden geçiş bölümündeki adımları kullanarak mevcut vektör dizinlerini geçirin.
Bölgesel erişilebilirlik
Bu özellik, Microsoft Fabric'teki Azure SQL Veritabanı ve SQL veritabanı arasında dağıtılıyor. Dağıtım sırasında kullanılabilirlik ve davranış bölgeye ve dizin sürümüne göre farklılık gösterebilir. Bir özellik veya söz dizimi kullanılamıyorsa, dağıtım tamamlandıkça otomatik olarak kullanılabilir duruma gelir. Geçerli bölgesel kullanılabilirlik durumu için bkz. Bölgeye göre özellik kullanılabilirliği.
SQL Server 2025 Önizleme özelliği
SQL Server 2025'te bu fonksiyon önizleme aşamasında ve değişebilir. Bu özelliği kullanmak için PREVIEW_FEATURES etkinleştirmeniz gerekir.
Kullanmadan önce geçerli sınırlamaları gözden geçirmeyi unutmayın.
Uyarı
Vektör Dizinlerinin en son sürümü şu anda yalnızca Azure SQL Veritabanı'nda ve Microsoft Fabric'teki SQL veritabanında kullanılabilir.
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.
>1
Paralel 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.
Uyarı
Paralel dizin işlemleri SQL Server'ın her sürümünde kullanılamaz. SQL Server sürümleri tarafından desteklenen özelliklerin listesi için, SQL Server 2022'nin Sürümleri ve desteklenen özellikleri veya SQL Server 2025'in Sürümleri ve desteklenen özellikleri sayfalarına bakınız.
Vektör dizinlerini en son sürüme yükseltme
Önemli
Kullanımdan kaldırma bildirimi: Önceki bir veri yapısı kullanılarak oluşturulan vektör dizinleri geçerli sürümde desteklenir ancak gelecekteki bir sürümde kullanımdan kaldırılacaktır. Gelecekteki uyumluluk ve en son vektör arama özelliklerine erişim sağlamak için aşağıdaki adımları kullanarak mevcut vektör dizinlerini geçirin.
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 otomatik, gerçek zamanlı dizin bakımıyla vektör dizini işlevselliğini korurken INSERT, UPDATE, DELETE ve MERGE işlemlerini gerçekleştirebilirsiniz
- Yinelemeli filtreleme: WHERE yan tümcesindeki koşul, alma işleminden sonra değil vektör arama işlemi sırasında uygulanır
- İyileştirici temelli: Sorgu iyileştiricisi, sorgu özelliklerine göre DiskANN dizininin mi yoksa kNN aramasının mı kullanılacağını otomatik olarak belirler
- Gelişmiş niceleme: Vektör niceleme teknikleri, daha iyi depolama verimliliği ve daha hızlı sorgu performansı sağlamak için tümleştirilmiştir ve bu iyileştirmeler kullanıcılar için saydamdır
Önceki vektör dizini sürüm sınırlamalarıyla ilgili ayrıntılar için Sınırlamalar ve dikkat edilmesi gerekenler bölümüne bakın.
Önceki vektör dizini sürümlerinden geçiş
En son özellikleri etkinleştirmek için önceki bir sürüm kullanılarak oluşturulan vektör dizinlerinin bırakılması ve yeniden oluşturulması gerekir. 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
- Yinelemeli filtreleme, tam DML desteği, iyileştirici temelli yürütme ve geliştirilmiş niceleme desteği zaten destekleniyor
- Geçiş gerekmez
Önceki bir sürüm kullanılarak oluşturuldu
- Eski filtre sonrası davranışını kullanır
- En son vektör arama özelliklerini desteklemez
- Gelecekte uyumluluk sağlamak için geçiş kesinlikle önerilir
2. Adım: Vektör dizinini bırakma ve yeniden oluşturma
Önceki bir biçim kullanılarak oluşturulan vektör dizinleri yerinde yükseltilemiyor. 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ı
Geçerli CREATE VECTOR INDEX deyim kullanılarak oluşturulan vektör dizinleri otomatik olarak en son DiskANN biçimini kullanır. Ek seçenek veya bayrak gerekmez.
3. Adım: Dizin sürümünü doğrulama
Yeniden oluşturma sonrasında dizinin en son sürümü kullandığını doğrulayın:
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 dizini sürümleri aşağıdaki ek sınırlamalara sahiptir. Dizin sürümünüzü denetlemek için bkz. Dizin sürümünü doğrulama.
Yalnızca son filtreleme: Koşul, arama işlemi sırasında değil yalnızca vektör alma işleminden sonra uygulanır. Bu, filtreler uygulandığında beklenenden daha az satır döndürülür.
Salt okunur tablolar: Vektör dizinleri olan tablolar salt okunur durumdadır. Vektör dizini oluşturulduktan sonra hiçbir DML işlemine (INSERT, UPDATE, DELETE, MERGE) izin verilmez.
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.El ile TOP_N ayarlama: Parametresini
TOP_NVECTOR_SEARCH, filtreleme sonrası dengeleme için el ile ayarlamanız gerekir ve genellikle istenen sayıda sonuç elde etmek için büyük boyutlu değerler gerekir.
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 dizinleri bölümlenemez. Bölüm desteği yok.
Tabloda birincil anahtar kümelenmiş dizini olmalıdır.
Vektör dizinleri abonelere çoğaltılamaz.
Vektör dizinleri olan tablolar kullanılarak
TRUNCATE TABLEkesilemiyor. Tü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 bkz . TRUNCATE TABLE kısıtlamaları.Vektör dizinleri DacPac veya BACPAC ile dağıtılamaz. Vektör dizinleri oluşturma zamanında NULL olmayan vektörlere sahip en az 100 satır gerektirir. DacPac, BACPAC veya İçeri/Dışarı Aktarma hizmetini kullanarak bir veritabanını içeri aktardığınızda, içeri aktarma işlemi verileri yüklemeden önce şema nesneleri (vektör dizinleri dahil) oluşturur ve bu da içeri aktarmanın başarısız olmasına neden olur.
Geçici çözüm: Veritabanını dışarı aktarmadan önce vektör dizinlerini bırakın ve içeri aktarma işleminden sonra dizinleri yeniden oluşturun.
En düşük veri gereksinimleri
Vektör dizinleri, dizinin oluşturulabilmesi için null olmayan vektör değerlerine sahip en az sayıda satır gerektirir.
- En düşük satır sayısı: Tabloda NULL olmayan vektör değerlerine sahip en az 100 satır bulunmalıdır.
- Hata davranışı: 100'den az satır içeren bir tabloda vektör dizini oluşturma girişimi 42266 hatasıyla başarısız oluyor.
Ö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ıra ihtiyaç duyulan geliştirme ve test senaryoları için deneme VECTOR_SEARCH yanılma tarama yaklaşımı kullanılarak dizin olmadan çalışır ancak daha büyük veri kümeleriyle performans düşer.
DML desteği
En son sürüm kullanılarak bir DiskANN vektör dizini oluşturulduktan sonra tablo artık salt okunur olmaz. Standart veri işleme dili (DML) işlemlerini kullanarak verileri serbestçe değiştirebilirsiniz ve değişiklikler otomatik olarak vektör arama sonuçlarına yansıtılı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 dizinleriyle kullanılabilir. Ö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 dizin oluşturma için yinelenen vektörlerin yüksek oranına sahip veri kümeleri önerilmez.
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 eklemelerin çoğu veya tümü değiştirildiğinde (örneğin, bir veri kümesini yeni bir modelle yeniden eklemek gibi) mevcut dizin artık yeni veri dağıtımını yansıtmayabilir.
Büyük ölçekli değiştirme senaryolarında:
- Vektör arama sorguları geçerli sonuçlar döndürmeye devam ediyor
- Ancak dizin yapısı farklı bir ekleme dağıtımı için oluşturulduğundan, Geri Çağırma ve Derecelendirme kalitesi düşebilir.
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
Kullanıcının tabloda izni olmalıdır ALTER .
Örnekler
Vektör ekleme örneğiyle Wikipedia makalesini indirin ve içeri aktarın.
Örneklerde, başlığın Wikipedia makalelerinin eklemelerini depolayan türünde wikipedia_articles bir sütuna title_vector sahip adlı vector bir tablonun varlığı varsayılır.
title_vector 1.536 boyutlu vektörler döndüren text-embedding-ada-002 veya text-embedding-3-small gibi bir ekleme modeliyle oluşturulmuş bir ekleme olduğu varsayılır.
Uçtan uca çözümler de dahil olmak üzere daha fazla örnek için Azure SQL Veritabanı Vektör Arama Örnekleri GitHub deposuna gidin.
Ö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) title_vector ürün ölçümünü kullanarak sütunda dot bir vektör dizini oluşturur ve paralelliği 8 ile sınırlar ve vektör dosya SECONDARY grubunda depolar.
CREATE VECTOR INDEX vec_idx
ON [dbo].[wikipedia_articles] ([title_vector])
WITH (METRIC = 'DOT', TYPE = 'DISKANN', MAXDOP = 8)
ON [SECONDARY];
Örnek 3
ve ilgili CREATE VECTOR INDEX işlevi kullanan VECTOR_SEARCH temel bir uçtan uca örnek. Eklemeler sahtedir. Gerçek dünya senaryosunda eklemeler, ekleme modeli ve AI_GENERATE_EMBEDDINGS ya da OpenAI SDK'sı gibi bir dış kitaplık kullanılarak oluşturulur.
Uyarı
En son sürüm vektör dizinleri, dizin oluşturmadan önce en az 100 veri satırı gerektirir. 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ştirir (yalnızca SQL Server 2025 için gereklidir; Doku'da Azure SQL Veritabanı veya 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 örneklerde, en son sürüm kullanılarak oluşturulan vektör dizinine sahip bir tablodaki DML işlemleri gösterilmektedir.
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 artık 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;
Vektör sütunu güncelleştirilirse, dizin buna göre güncelleştirilir, böylece gelecekteki vektör aramaları yeni ekleme özelliğini kullanır.
Karmaşık işlemler için MERGE kullanma
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 dizini, deyimi tarafından MERGE yapılan tüm değişiklikleri yansıtacak şekilde otomatik olarak güncelleştirilir.