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
Yaklaşık en yakın komşu vektör arama algoritmasını kullanarak belirli bir sorgu vektörlerine benzer vektörler arayın. 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. Kullanmadan önce geçerli sınırlamaları gözden geçirmeyi unutmayın.
Uyarı
Önizleme özelliği olarak, bu makalede sunulan teknoloji Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları'na tabidir.
Önemli
En iyi performans ve en son vektör arama özelliklerine erişmek için en son sürümle oluşturulan vektör dizinlerini kullanın. Mevcut dizinleri yükseltme ve sürümleri karşılaştırma hakkında daha fazla bilgi için bkz. CREATE VECTOR INDEX - Vektör dizinlerini en son sürüme yükseltme.
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.
Uyarı
Kullanımdan kaldırma bildirimi: TOP_N içindeki VECTOR_SEARCH parametresi kullanım dışıdır ve yalnızca önceki sürüm vektör dizinleriyle geriye dönük uyumluluk için korunur. Yeni uygulamalar bunun yerine söz dizimi kullanmalıdır SELECT TOP (N) WITH APPROXIMATE . Daha fazla bilgi için bkz . Söz dizimi.
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.
En son vektör dizinleri ile önemli geliştirmeler
En son sürümle oluşturulan vektör dizinleri önemli geliştirmeler 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
Syntax
Transact-SQL söz dizimi kuralları
En son sürüm Vektör Dizinleri ile:
Önemli
En son vektör dizini sürümünü kullanan tabloları sorgularken, yaklaşık vektör araması TOP (N) APPROXIMATE söz dizimini kullanmalıdır. Bu söz dizimi gereksinimi, sorgunun açıkça en yakın komşuya yakın sonuçlar isteğinde bulunduğunu gösterir.
SELECT TOP (N) WITH APPROXIMATE
column_list
FROM VECTOR_SEARCH(
TABLE = object [ AS source_table_alias ]
, COLUMN = vector_column
, SIMILAR_TO = query_vector
, METRIC = { 'cosine' | 'dot' | 'euclidean' }
) [ AS result_table_alias ]
[ WHERE predicate ]
ORDER BY distance;
Vektör Dizinleri'nin önceki sürümüyle:
VECTOR_SEARCH(
TABLE = object [ AS source_table_alias ]
, COLUMN = vector_column
, SIMILAR_TO = query_vector
, METRIC = { 'cosine' | 'dot' | 'euclidean' }
, TOP_N = k
) [ AS result_table_alias ]
Önemli
TOP_N parametresi en son sürüm vektör dizinleri ile desteklenmez. Yukarıda gösterilen söz dizimini SELECT TOP (N) WITH APPROXIMATE kullanın. Daha fazla bilgi için bkz. Eski söz dizimi kullanılırken hata oluştu.
Arguments
TABLO = nesne [AS source_table_alias]
Aramanın gerçekleştirildiği tablo. Temel tablo olmalıdır. Hem yerel hem de genel görünümler, geçici tablolar desteklenmez.
SÜTUN = vector_column
Aramanın gerçekleştirildiği vektör sütunu. Sütun bir vektör veri türü olmalıdır.
SIMILAR_TO = query_vector
Arama için kullanılan vektör. Bir değişken veya vektör türünde bir sütun olmalıdır.
METRİK = { 'kosinus' | 'nokta' | 'Öklid' }
Sorgu vektörünü ve belirtilen sütundaki vektörleri arasındaki uzaklığı hesaplamak için kullanılan uzaklık ölçümü. ANN (Yaklaşık En Yakın Komşu) dizini yalnızca aynı ölçüme ve aynı sütuna sahip eşleşen bir ANN dizini bulunduğunda kullanılır. Uyumlu ANN dizini yoksa bir uyarı oluşturulur ve kNN (en yakın k komşu) algoritması kullanılır.
TOP_N = <k>
Uyarı
Bu parametre kullanım dışıdır ve yalnızca önceki sürüm vektör dizinleriyle geriye dönük uyumluluk için korunur. En son sürüm dizinleri için bunun yerine söz dizimlerini kullanın SELECT TOP (N) WITH APPROXIMATE . Yeni uygulamalar en son söz dizimini kullanmalıdır.
Döndürülecek benzer vektör sayısı üst sınırı. Pozitif bir tamsayı olmalıdır. Bu parametre, en son sürüm kullanılarak oluşturulan vektör dizinleriyle desteklenmez.
result_table_alias
Diğer ad, sonuç kümesine başvurmak için kullanılır.
Sonuç kümesi döndürme
İşlev tarafından döndürülen sonuç kümesi şunları VECTOR_SEARCH içerir:
Bağımsız değişkende belirtilen tablodan
TABLEtüm sütunlar.bağımsız değişkeni tarafından
distancebelirtilen sütundaki vektör ile bağımsız değişkende sağlananCOLUMNvektör arasındaki uzaklığı temsil eden adlıSIMILAR_TOek bir sütun.
Uzaklık sütunu işlevin VECTOR_SEARCH kendisi tarafından oluşturulurken, diğer tüm sütunlar bağımsız değişkende başvuruda bulunan tablodan TABLE gelir.
Bağımsız değişkende tablo için bir diğer ad kullanıyorsanız, deyimindeki TABLE sütunlarına SELECT başvurmak için aynı diğer adı kullanmanız gerekir. içinde VECTOR_SEARCHbelirtilen tablodaki başvuru sütunlarına TABLE atanan diğer adı kullanamazsınız. Çıktısını alıp VECTOR_SEARCH tablo verileriyle birleştirerek oluşturulan sonuç kümesini düşünüyorsanız bu davranışı anlamak daha kolaydır.
Bağımsız değişkende TABLE belirtilen tablo zaten adlı distancebir sütun içeriyorsa, davranış sütun adını paylaşan iki tablo arasındaki SQL birleşimine benzer olacaktır. Böyle durumlarda, sütun başvurularını belirsiz bir şekilde belirtmek için tablo diğer adlarını kullanmanız gerekir; aksi takdirde bir hata oluşur.
Önemli
Sütun distance , yaklaşık vektör arama sonuçları için tek geçerli sıralama anahtarıdır.
Limitations
-
Yalnızca artan düzen: Sütun
distanceartan düzende (ASC) sıralanmalıdır. Azalan düzen (DESC) desteklenmez.
Sürüme özgü davranış
davranışı VECTOR_SEARCH vektör dizini sürümüne bağlı olarak değişir.
Önceki vektör dizini sürümleri
Uyarı
Bu sınırlamalar yalnızca önceki sürümlerle oluşturulan vektör dizinleri için geçerlidir. Yinelemeli filtrelemeyi etkinleştirmek için en son sürüme geçin. Bkz . Önceki vektör dizini sürümlerinden geçiş.
Yalnızca filtreleme sonrası: Herhangi bir koşul uygulanmadan önce vektör araması yapılır. Ek koşul, yalnızca en benzer vektörler döndürüldükten sonra uygulanır. Aşağıdaki örnek, sorgu vektörine @qven çok benzeyen eklemeler içeren ilk 10 satırı döndürür ve yan tümcesinde WHERE belirtilen koşulu uygular. Vektör araması tarafından döndürülen vektörlerle ilişkili 10 satırdan hiçbiri 1'e eşit sütuna sahip accepted değilse sonuç boş olur.
SELECT TOP (10) s.id,
s.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.sessions AS s,
COLUMN = embedding,
SIMILAR_TO = @qv,
METRIC = 'cosine',
TOP_N = 10
) AS r
WHERE accepted = 1
ORDER BY r.distance;
Genel sınırlamalar
VECTOR_SEARCH görünümün gövdesinde kullanılamaz.
Examples
A. Temel vektör benzerlik araması
Önemli
En son vektör dizini sürümünü kullanan tabloları sorgularken, yaklaşık vektör araması söz dizimini TOP (N) WITH APPROXIMATE kullanmalıdır. Bu söz dizimi gereksinimi, sorgunun açıkça en yakın komşuya yakın sonuçlar isteğinde bulunduğunu gösterir.
Aşağıdaki örnek, tablosundaki en Pink Floyd music style benzer 10 makaleyi wikipedia_articles_embeddings bulur.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT TOP (10) WITH APPROXIMATE
t.id,
t.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles_embeddings AS t,
COLUMN = content_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS r
ORDER BY r.distance;
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 TOP_N kullanma SELECT TOP (N) WITH APPROXIMATE |
| Önceki sürümler (kullanım dışı) | İşlevde VECTOR_SEARCH parametre kullanma TOP_N |
Tip
Vektör dizini sürümünüzü belirlemek için bkz. Önceki vektör dizini sürümlerinden geçiş.
Önceki sürüm dizinleri için (kullanım dışı söz dizimi):
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT TOP (10)
t.id,
t.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles_embeddings AS t,
COLUMN = content_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine',
TOP_N = 10 -- Deprecated: Use SELECT TOP (N) WITH APPROXIMATE instead
) AS r
ORDER BY r.distance;
Uyarı
Parametresini TOP_N en son sürüm vektör dizinleriyle kullanmak Msg 42274 hatasını döndürür. Ayrıntılı bilgi için Beklenen davranışlar bölümündeki Eski söz dizimini kullanma hatası bölümüne bakın.
B. Dizin oluşturma ile iş akışını tamamlama
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, VECTOR_SEARCH sahte eklemelerle işlevi gösterir:
- Ö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)
DECLARE @i INT = 1;
WHILE @i <= 100
BEGIN
INSERT INTO Articles (id, title, content, embedding)
VALUES (
@i,
'Article ' + CAST(@i AS NVARCHAR(10)),
'Content for article ' + CAST(@i AS NVARCHAR(10)),
JSON_ARRAY(
CAST(@i * 0.01 AS FLOAT),
CAST(@i * 0.02 AS FLOAT),
CAST(@i * 0.03 AS FLOAT),
CAST(@i * 0.04 AS FLOAT),
CAST(@i * 0.05 AS FLOAT)
)
);
SET @i = @i + 1;
END
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 TOP_N kullanma SELECT TOP (N) WITH APPROXIMATE |
| Önceki sürümler (kullanım dışı) | İşlevde VECTOR_SEARCH parametre kullanma TOP_N |
Ö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 -- Deprecated: Use SELECT TOP (N) WITH APPROXIMATE instead
) AS s
ORDER BY s.distance, t.title;
C. Yinelemeli filtreleme ile vektör araması
Aşağıdaki örnekte en son sürüm vektör dizinleriyle yinelemeli filtreleme gösterilmektedir. Sorgu, arama işlemi sırasında koşullar uygulanırken benzer makaleler bulur.
En son sürüm dizinleri ile WHERE yan tümcesindeki koşul, vektör arama işlemi sırasında (sonra değil) uygulanır. Altyapı, tüm ölçütlere uyan 5 uygun satır bulana kadar aramaya devam eder:
- "Makine öğrenmesi algoritmalarına" vektör benzerliği
- Kategori eşittir 'Teknoloji'
- Yayımlanan durum 1'e eşittir
Bu, arama parametrelerini el ile ayarlamadan tam olarak 5 sonuç (varsa) elde edersiniz. Önceki ve en son sürümler arasında ayrıntılı bir karşılaştırma için Beklenen davranışlar bölümündeki Yinelemeli filtreleme davranışı bölümüne bakın.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'machine learning algorithms' USE MODEL Ada2Embeddings);
SELECT TOP (5) WITH APPROXIMATE
t.id,
t.title,
t.category,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = content_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS r
WHERE t.category = 'Technology'
AND t.published = 1
ORDER BY r.distance;
Uyarı
GROUP BY, toplama işlevleri ve pencere işlevleri gibi bazı SQL işlemleri bir alt sorgu düzeni gerektirir. Ayrıntılar için bkz. Vektör aramasını diğer SQL işlemleriyle birleştirme.
D. INNER JOIN ile çok tablolu birleşimler
Aşağıdaki örnekte, birden çok tabloda filtreleme ile INNER JOIN gösterilmektedir. Eklemeler ana varlık verilerinden ayrı bir tabloda depolandığında kullanın.
-- Assuming a schema with separate tables for articles and embeddings
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'artificial intelligence and machine learning' USE MODEL Ada2Embeddings);
SELECT TOP (10) WITH APPROXIMATE
a.id,
a.title,
a.category,
vs.distance
FROM wikipedia_articles a
INNER JOIN VECTOR_SEARCH(
TABLE = wikipedia_articles_embeddings AS e,
COLUMN = content_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS vs ON a.id = e.article_id
WHERE e.approved = 1 -- Iterative filter on embedding table
AND a.category IN ('Technology', 'Science') -- Filter on main table
AND a.views > 50000
ORDER BY vs.distance;
Bu örneğin temel özellikleri:
-
Tablo diğer adı kapsamı: diğer adı
eTABLE = wikipedia_articles_embeddings AS e, en son sürüm dizinleriyle yinelemeli filtreleme için WHERE yan tümcesinde kullanılabilir
Beklenen davranışlar
Eski söz dizimi kullanılırken hata oluştu
En son sürüm vektör dizinine sahip bir tabloyu sorgularken parametresini VECTOR_SEARCH kullanmaya TOP_N ç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ı düzeltmek için:
- parametresini
TOP_NişlevdenVECTOR_SEARCHkaldırma - Bunun yerine söz dizimlerini kullanın
SELECT TOP (N) WITH APPROXIMATE
Yanlış (en son sürüm diziniyle hata üretir):
SELECT TOP (10)
t.id,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine',
TOP_N = 10 -- This parameter causes the error with latest version indexes
) AS r;
Doğru (en son sürüm diziniyle çalışır):
SELECT TOP (10) WITH APPROXIMATE -- Specify TOP and WITH APPROXIMATE here
t.id,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
-- No TOP_N parameter
) AS r
ORDER BY r.distance;
Yinelemeli filtreleme davranışı
En son sürüm, önceki vektör dizini sürümlerine göre önemli geliştirmeler sağlar:
| Görünüş | Önceki sürüm | En son sürüm |
|---|---|---|
| Koşul uygulaması | Vektör araması sabit sayıda en yakın komşu döndürdükten sonra ilişkisel koşul uygulandı (yalnızca filtreleme sonrası) | İlişkisel koşul, vektör arama işlemi sırasında uygulanır (yinelemeli filtreleme) |
| Sonuç eksiksizliği | İlk en yakın komşular, uygun satırlar mevcut olsa bile filtreleri karşılamamışsa sorgular daha az satır döndürebilir veya satır döndürmez | Veriler mevcut olduğunda sorgular, el ile ayarlama veya sorgu yeniden yazma olmadan beklenen satır sayısını döndürür |
| TOP (N) ayarlama | Kullanıcıların genellikle son filtrelemeyi telafi etmek için TOP (N) değerlerini tahmin etmek veya aşırı örnekleme yapmak zorunda kaldı | TOP (N) değerlerini tahmin etmeniz gerekmez. Yeterli uygun satır bulunana veya arama alanı tükenene kadar altyapıda arama yapılır |
| Sorgu iyileştirme | Uygulanamaz | SQL Server, vektör dizini aramaları ve uygun olduğunda kNN taramaları arasında geçiş yapma da dahil olmak üzere en verimli yürütme stratejisini otomatik olarak seçer |
Yinelemeli filtrelemenin pratik bir örneği için bkz. Örnek C: Yinelemeli filtreleme ile vektör araması.
ORDER BY yan tümcesi gereksinimleri
kullanırken SELECT TOP (N) WITH APPROXIMATEORDER BY yan tümcesinin belirli gereksinimleri vardır:
- ORDER BY mevcut olmalıdır: ORDER BY yan tümcesi olmayan sorgular hatasıyla başarısız olur.
- Yalnızca uzaklık sütununa izin verilir: ORDER BY yan tümcesi yalnızca VECTOR_SEARCH sonuç kümesinden uzaklık sütununa başvurmalıdır. Ek sütunları ekleme işlemi hatayla başarısız oluyor. Birden çok sütuna göre sıralamak için , Birden çok ORDER BY sütunu altında açıklanan alt sorgu desenini kullanın.
- Yalnızca artan düzen: Uzaklık sütunu artan düzende (ASC) sıralanmalıdır. Azalan düzen (DESC) desteklenmez.
Geçerli ORDER BY:
SELECT TOP (10) WITH APPROXIMATE
t.id,
t.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = products,
COLUMN = embedding,
SIMILAR_TO = @query_vector,
METRIC = 'cosine'
) AS r
INNER JOIN products t ON t.id = r.id
ORDER BY r.distance; -- ✓ Valid
Geçersiz ORDER BY desenleri:
-- Missing ORDER BY
SELECT TOP (10) WITH APPROXIMATE
r.distance
FROM VECTOR_SEARCH(
TABLE = products,
COLUMN = embedding,
SIMILAR_TO = @query_vector,
METRIC = 'cosine'
) AS r;
-- ✗ Error Msg 42248: APPROXIMATE cannot be used in a query without ORDER BY
-- Multiple columns in ORDER BY
SELECT TOP (10) WITH APPROXIMATE
t.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = products,
COLUMN = embedding,
SIMILAR_TO = @query_vector,
METRIC = 'cosine'
) AS r
INNER JOIN products t ON t.id = r.id
ORDER BY r.distance, t.title;
-- ✗ Error Msg 42271: TOP WITH APPROXIMATE and VECTOR_SEARCH requires ORDER BY
-- on distance column ascending, and no other columns
-- Descending order
SELECT TOP (10) WITH APPROXIMATE
r.distance
FROM VECTOR_SEARCH(
TABLE = products,
COLUMN = embedding,
SIMILAR_TO = @query_vector,
METRIC = 'cosine'
) AS r
ORDER BY r.distance DESC;
-- ✗ Error Msg 42271: TOP WITH APPROXIMATE and VECTOR_SEARCH requires ORDER BY
-- on distance column ascending, and no other columns
Vektör dizini olmayan davranış
VECTOR_SEARCH hedef sütunda vektör dizini olmasa bile sorguları yürütebilir. Dizin olmadan sorgu, tüm satırların uzaklıklarını hesaplamak için tam tablo taraması (k-en yakın komşu (kNN) araması yapar.
YAKLAŞıK İLE TOP olmadan sorgu davranışı
olmadan SELECT TOP (N) WITH APPROXIMATEkullanırken VECTOR_SEARCH sorgu davranışı ve ORDER BY yan tümcelerinin varlığına TOP bağlıdır:
- TOP yok, ORDER BY yok veya ORDER BY uzaklık dışı: Tüm satırlar için uzaklıkları hesaplayan ve döndüren tam tablo taraması (deneme yanılma araması)
- ORDER BY uzaklığı olan TOP (YAKLAŞıK yok): Tam olarak en yakın komşu araması olan kNN (k-en yakın komşular) araması olarak yürütür
Örnek - Uzaklık sütunuyla tam tarama:
-- Returns all rows with calculated distances
SELECT
t.id,
t.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS r
ORDER BY t.id; -- Not ordering by distance
Örnek - kNN araması (tam olarak en yakın komşular):
-- Returns exact top 10 nearest neighbors using kNN
SELECT TOP (10)
t.id,
t.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS r
ORDER BY r.distance; -- No WITH APPROXIMATE = exact kNN
VECTOR_SEARCH olmadan YAKLAŞıK ILE ÜST
SELECT TOP (N) WITH APPROXIMATE Sorguda işlev VECTOR_SEARCH olmadan kullanılması hatayla sonuçlanır.
WITH APPROXIMATE yan tümcesi bir VECTOR_SEARCH işlevin mevcut olmasını gerektirir.
Yanlış - Bu sorgu başarısız oluyor:
-- Error: WITH APPROXIMATE requires VECTOR_SEARCH
SELECT TOP (10) WITH APPROXIMATE
id,
title,
VECTOR_DISTANCE('cosine', title_vector, @qv) AS distance
FROM dbo.wikipedia_articles
WHERE title_vector IS NOT NULL
ORDER BY VECTOR_DISTANCE('cosine', title_vector, @qv);
Doğru - VECTOR_SEARCH kullanın:
-- Correct: WITH APPROXIMATE with VECTOR_SEARCH
SELECT TOP (10) WITH APPROXIMATE
t.id,
t.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS r
ORDER BY r.distance;
TRUNCATE TABLE kısıtlamaları
Vektör dizinlerine sahip tablolar kullanılarak TRUNCATE TABLEkesilemez. Vektör dizinli bir tablodan tüm verileri kaldırmak için:
- Vektör dizinini bırakma
- Tabloyu kesme
- Tabloyu en az 100 satırla yeniden doldurma
- Vektör dizinini yeniden oluşturma
Örnek iş akışı:
-- Step 1: Drop the vector index
DROP INDEX idx_vector ON wikipedia_articles;
-- Step 2: Truncate the table
TRUNCATE TABLE wikipedia_articles;
-- Step 3: Repopulate with data (at least 100 rows)
-- ... insert operations ...
-- Step 4: Recreate the vector index
CREATE VECTOR INDEX idx_vector
ON wikipedia_articles(title_vector)
WITH (METRIC = 'cosine');
Vektör araması için tablo ipuçları
Sorgu yürütme davranışını denetlemek için işleviyle tablo VECTOR_SEARCH ipuçlarını kullanabilirsiniz. Tablo ipucu, FORCE_ANN_ONLY iyileştirici başka bir yürütme stratejisi seçebileceğinden bile sorgu iyileştiriciyi yalnızca en yakın yaklaşık komşu (ANN) dizinini kullanmaya zorlar.
Syntax:
FROM VECTOR_SEARCH(
TABLE = table_name,
COLUMN = column_name,
SIMILAR_TO = vector_value,
METRIC = 'metric_name'
) AS alias WITH (FORCE_ANN_ONLY)
Example:
Aşağıdaki örnek, vektör arama sorgusu için yaklaşık en yakın komşu dizininin kullanılmasını zorlar:
DECLARE @qembedding VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'artificial intelligence' USE MODEL Ada2Embeddings);
SELECT TOP 50 WITH APPROXIMATE
t.id,
t.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qembedding,
METRIC = 'cosine'
) AS r WITH (FORCE_ANN_ONLY)
ORDER BY r.distance;
Sorgunun, iyileştiricinin otomatik strateji seçimini geçersiz kılarak en yakın yaklaşık komşu dizin stratejisini kullandığından emin olmak istediğinizde kullanın FORCE_ANN_ONLY .
Uyarı
Kullanmak FORCE_ANN_ONLY için her ikisi de gerekir:
- Hedef sütunda vektör dizini
-
SELECT TOP (N) WITH APPROXIMATEsorguda
Herhangi bir gereksinim eksikse, ipucunun zorladığı yaklaşık en yakın komşu stratejisini kullanamadığından sorgu başarısız olur.
Vektör aramasını diğer SQL işlemleriyle birleştirme
ile TOP (N) WITH APPROXIMATE işlevinin VECTOR_SEARCH kullanımı için belirli gereksinimleri vardır. Bazı SQL işlemleri doğrudan vektör araması ile kullanılabilirken, diğerleri alt sorgu deseni gerektirir.
Alt sorgu deseni gerektiren işlemler
ile TOP (N) WITH APPROXIMATEdoğrudan uyumlu olmayan işlemler gerçekleştirmeniz gerektiğinde, alt sorguda (iç sorgu) vektör aramasını kullanın, ardından işlemlerinizi dış sorguya uygulayın. Bu düzen, tam SQL işlevselliğini etkinleştirirken yaklaşık vektör aramasının performans avantajlarını korur.
Tip
Alt sorgu düzeni, ile TOP (N) WITH APPROXIMATEdoğrudan birleştirilmeyecek tüm işlemler için çalışır. İç sorguya vektör araması uygulayın, ardından dış sorgudaki herhangi bir SQL işlemini kullanın.
Yaygın senaryolar
Aşağıdaki tabloda, alt sorgu deseni gerektiren işlemler listelenir:
| Operation | Örnek kullanım örneği |
|---|---|
| GRUPLA | Kategori başına istatistikleri hesaplama |
| Toplama işlevleri | Sonuçlar arasında genel COUNT, AVG, MIN, MAX |
| Pencere işlevleri | ROW_NUMBER, RANK, DENSE_RANK, NTILE |
| İşlemleri ayarlama | UNION, UNION ALL, EXCEPT, INTERSECT |
| Birden çok ORDER BY sütunu | Uzaklığa göre, sonra tarihe veya başlığa göre sırala |
| BELİRGİN | Yinelenen sonuçları kaldırma |
| ÇAPRAZ UYGULA | Dış tablodan satır başına vektör araması uygulama |
GROUP BY ve toplama işlevleri
Aşağıdaki örnek, en çok eşleşen makalelerin kategoriye göre ortalama uzaklıklarını bulur. Bu örnekte, makaleleri sınıflandırmak için tabloya wikipedia_articles bir category sütun eklenmiştir.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'machine learning' USE MODEL Ada2Embeddings);
SELECT
category,
COUNT(*) AS article_count,
AVG(distance) AS avg_distance,
MIN(distance) AS closest_match
FROM (
SELECT TOP (100) WITH APPROXIMATE
t.id,
t.title,
t.category,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS r
ORDER BY r.distance
) AS vector_results
GROUP BY category
ORDER BY avg_distance;
Pencere işlevleri
Aşağıdaki örnek makaleleri benzerlik derecesine göre sıralar ve dörttebirlik değerler atar.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'neural networks' USE MODEL Ada2Embeddings);
SELECT
id,
title,
category,
distance,
ROW_NUMBER() OVER (ORDER BY distance) AS rank,
NTILE(4) OVER (ORDER BY distance) AS quartile
FROM (
SELECT TOP (100) WITH APPROXIMATE
t.id,
t.title,
t.category,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS r
ORDER BY r.distance
) AS vector_results
WHERE distance < 0.5
ORDER BY rank;
ayarlama işlemleri (UNION, INTERSECT, EXCEPT)
Aşağıdaki örnek, UNION kullanarak iki farklı arama sorgusunun sonuçlarını birleştirir.
DECLARE @qv1 VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'artificial intelligence' USE MODEL Ada2Embeddings);
DECLARE @qv2 VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'machine learning' USE MODEL Ada2Embeddings);
SELECT id, title, 'AI Search' AS source
FROM (
SELECT TOP (50) WITH APPROXIMATE
t.id,
t.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv1,
METRIC = 'cosine'
) AS r
ORDER BY r.distance
) AS ai_results
UNION
SELECT id, title, 'ML Search' AS source
FROM (
SELECT TOP (50) WITH APPROXIMATE
t.id,
t.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv2,
METRIC = 'cosine'
) AS r
ORDER BY r.distance
) AS ml_results
ORDER BY id;
BELİRGİN
Aşağıdaki örnek, en çok eşleşen makalelerden ayrı kategoriler alır.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'deep learning' USE MODEL Ada2Embeddings);
SELECT DISTINCT category
FROM (
SELECT TOP (100) WITH APPROXIMATE
t.id,
t.category,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS r
ORDER BY r.distance
) AS vector_results
WHERE distance < 0.7
ORDER BY category;
Birden çok ORDER BY sütunu
Aşağıdaki örnek, mesafeye göre, sonra da bağlar için başlığa göre sıralanır.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'quantum computing' USE MODEL Ada2Embeddings);
SELECT
id,
title,
category,
distance
FROM (
SELECT TOP (100) WITH APPROXIMATE
t.id,
t.title,
t.category,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.wikipedia_articles AS t,
COLUMN = title_vector,
SIMILAR_TO = @qv,
METRIC = 'cosine'
) AS r
ORDER BY r.distance
) AS vector_results
ORDER BY distance, title;
ÇAPRAZ UYGULA
ile kullanırken SELECT TOP (N) WITH APPROXIMATEVECTOR_SEARCHveya OUTER APPLY aynı FROM yan tümcesinde kullanamazsınızCROSS APPLY. Bu, işlevin içinde VECTOR_SEARCH dış başvuru olmasa bile geçerlidir.
ile CROSS APPLY bir sorgu mantıksal olarak birden çok vektör araması (dış tablodan satır başına bir tane) gerçekleştirir ve tüm sonuçları tek bir sıralı akışta birleştirir. Yaklaşık en yakın komşu algoritması, yaklaşık garantileri ve performans özelliklerini korurken birden çok bağımsız vektör aramasının sonuçlarını verimli bir şekilde birleştiremez.
Hata oluşturan desen:
-- This query is NOT supported
SELECT TOP (100) WITH APPROXIMATE
o.id,
vs.title,
vs.distance
FROM Orders AS o
CROSS APPLY VECTOR_SEARCH(
TABLE = Products,
COLUMN = embedding,
SIMILAR_TO = o.customer_preference_vector,
METRIC = 'cosine'
) AS vs
WHERE o.order_date > '2026-01-01'
ORDER BY vs.distance;
Bu düzen, her siparişin müşteri tercihi için benzer ürünler bulmaya çalışır, ancak yaklaşık bir vektör arama planıyla yürütülemez.
Önerilen desen:
Benzer sonuçlar elde etmek için kendi içinde CROSS APPLY ile TOP (N) WITH APPROXIMATE bir alt sorgu kullanın:
-- This query IS supported
SELECT
o.id,
vs.title,
vs.distance
FROM Orders AS o
CROSS APPLY (
SELECT TOP (10) WITH APPROXIMATE
p.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = Products AS p,
COLUMN = embedding,
SIMILAR_TO = o.customer_preference_vector,
METRIC = 'cosine'
) AS r
ORDER BY r.distance
) AS vs
WHERE o.order_date > '2026-01-01';
Bu düzende:
- Her vektör araması, alt sorgudaki ilk 10 sonuçla sınırlıdır
- Dış sorgu kullanılmıyor
WITH APPROXIMATE - Sonuçların kapsamı dış tablodaki satır başına düzgün şekilde belirlenmiştir
Doğrudan çalışan işlemler
Aşağıdaki işlemler, alt sorgu gerektirmeden doğrudan ile VECTOR_SEARCH kullanılabilir:
- INNER JOIN - Bkz. Örnek D: INNER JOIN ile çok tablolu birleşimler
- WHERE önkoşulları - Yinelemeli veya filtreleme sonrası uygulama
- Tek ORDER BY uzaklığı