Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre: SQL Server 2025 (17.x)
Azure SQL Database
SQL database in Microsoft Fabric
Az adott lekérdezésvektorokhoz hasonló vektorok keresése a legközelebbi szomszéd vektorkeresési algoritmus használatával. Ha többet szeretne megtudni a vektorindexelés és a vektorkeresés működéséről, valamint a pontos és közelítő keresés közötti különbségekről, tekintse meg a vektorkeresést és a vektorindexeket az SQL Database Engine-ben.
Azure SQL Database és SQL Database a Fabricben
A funkció előzetesben van. Használat előtt ellenőrizze az aktuális korlátozásokat .
Megjegyzés:
Előzetes verziójú funkcióként a cikkben bemutatott technológia a Microsoft Azure előzetes verziójának kiegészítő használati feltételeire vonatkozik.
Fontos
Az optimális teljesítmény és a legújabb vektorkeresési képességek eléréséhez használja a legújabb verzióval létrehozott vektorindexeket. A meglévő indexek frissítésével és a verziók összehasonlításával kapcsolatos további információkért lásd: CREATE VECTOR INDEX – A vektorindexek frissítése a legújabb verzióra.
Regionális rendelkezésre állás
Ez a funkció az Azure SQL Database-ben és az SQL Database-ben van üzembe helyezve a Microsoft Fabricben. A bevezetés során a rendelkezésre állás és a működés régiónként és indexverziónként eltérő lehet. Ha egy szolgáltatás vagy szintaxis nem érhető el, az üzembe helyezés befejeződése után automatikusan elérhetővé válik. Az aktuális regionális rendelkezésre állási állapotot a Szolgáltatás rendelkezésre állása régiónként című témakörben tekintheti meg.
Figyelmeztetés
Elavulással kapcsolatos értesítés: A TOP_N paraméter VECTOR_SEARCH elavult, és csak a korábbi verzióvektorindexekkel való visszamenőleges kompatibilitás érdekében van fenntartva. Az új implementációknak inkább szintaxist kell használniuk SELECT TOP (N) WITH APPROXIMATE . További információ: Szintaxis.
SQL Server 2025 Preview funkció
Az SQL Server 2025-ben ez a funkció előnézetben van, és változhat. A funkció használatához engedélyeznie kell az PREVIEW_FEATURESadatbázis hatókörébe tartozó konfigurációt.
Használat előtt ellenőrizze az aktuális korlátozásokat .
Megjegyzés:
A Vektorindexek legújabb verziója jelenleg csak az Azure SQL Database-ben és a Microsoft Fabric SQL Database-ben érhető el.
Főbb fejlesztések a legújabb vektorindexekkel
A legújabb verzióval létrehozott vektorindexek jelentős fejlesztéseket vezetnek be:
- Teljes DML-támogatás: Eltávolítja azt a korábbi korlátozást, amely csak olvashatóvá tette a vektoros indexelt táblákat az index létrehozása után. Mostantól az INSERT, UPDATE, DELETE és MERGE műveleteket is végrehajthatja, miközben a vektorindex funkcióit automatikus, valós idejű indexkarbantartással tartja fenn
- Iteratív szűrés: A WHERE záradék predikátumai a vektorkeresési folyamat során kerülnek alkalmazásra, nem a lekérés után
- Optimalizálóalapú: A lekérdezésoptimalizáló automatikusan meghatározza, hogy a DiskANN-indexet vagy a kNN-keresést használja-e a lekérdezési jellemzők alapján
- Speciális kvantálás: A vektorkvantálási technikák integrálva lettek a jobb tárolási hatékonyság és a gyorsabb lekérdezési teljesítmény érdekében, mivel ezek az optimalizálások transzparensek a felhasználók számára
Syntax
Transact-SQL szintaxis konvenciók
A legújabb verziójú vektorindexekkel:
Fontos
A legújabb vektorindex-verziót használó táblák lekérdezéséhez a közelítő vektorkeresésnek a TOP (N) APPROXIMATE szintaxist kell használnia. Ez a szintaxiskövetelmény azt jelzi, hogy a lekérdezés explicit módon a legközelebbi szomszédhoz közeli eredményeket kéri.
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;
Korábbi verziójú vektorindexekkel:
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 ]
Fontos
A TOP_N paraméter nem támogatott a legújabb verzióvektorindexekkel. Használja a SELECT TOP (N) WITH APPROXIMATE fenti szintaxist. További információt az örökölt szintaxist használó hiba című témakörben talál.
Arguments
TABLE = objektum [AS source_table_alias]
Tábla, amelyen a keresést végrehajtja. Alaptáblának kell lennie. A nézetek, a helyi és a globális ideiglenes táblák nem támogatottak.
OSZLOP = vector_column
Az a vektoroszlop, amelyben a keresés történik. Az oszlopnak vektor adattípusnak kell lennie.
SIMILAR_TO = query_vector
A kereséshez használt vektor. Változónak vagy vektor típusú oszlopnak kell lennie.
METRIC = { 'cosine' | "pont" | "euklideszi" }
A lekérdezésvektor és a megadott oszlop vektorai közötti távolság kiszámításához használt távolságmetrika. Ann (közelítő legközelebbi szomszéd) indexet csak akkor használ a rendszer, ha egy egyező ANN-index található ugyanahhoz a metrikához és ugyanazon az oszlophoz. Ha nincsenek kompatibilis ANN-indexek, a rendszer figyelmeztetést ad, és a kNN (k-legközelebbi szomszéd) algoritmust használja.
TOP_N = <k>
Figyelmeztetés
Ez a paraméter elavult, és csak a korábbi verzióvektorindexekkel való visszamenőleges kompatibilitás érdekében van fenntartva. A legújabb verzióindexekhez használja SELECT TOP (N) WITH APPROXIMATE inkább a szintaxist. Az új implementációknak a legújabb szintaxist kell használniuk.
A visszaadandó hasonló vektorok maximális száma. Pozitív egész számnak kell lennie. Ez a paraméter nem támogatott a legújabb verzióval létrehozott vektorindexekkel.
result_table_alias
Az alias az eredményhalmazra hivatkozik.
Eredményhalmaz visszaadása
A függvény által visszaadott eredményhalmaz a VECTOR_SEARCH következőket tartalmazza:
Az argumentumban megadott tábla összes oszlopa
TABLE.Egy további oszlop neve
distance, amely az argumentum általCOLUMNmegadott oszlopban lévő vektor és az argumentumbanSIMILAR_TOmegadott vektor közötti távolságot jelöli.
A távolság oszlopot maga a VECTOR_SEARCH függvény hozza létre, míg az összes többi oszlop az argumentumban TABLE hivatkozott táblából származik.
Ha az argumentumban egy aliast használ a TABLE táblához, ugyanazt az aliast kell használnia az utasítás oszlopaira SELECT való hivatkozáshoz. A megadott VECTOR_SEARCHtáblából származó oszlopok hivatkozásához TABLE rendelt alias nem használható. Ez a viselkedés könnyebben érthető, ha úgy gondolja, hogy az eredményhalmaz a táblaadatokkal VECTOR_SEARCH való összevonásával jön létre.
Ha az TABLE argumentumban megadott tábla már tartalmaz egy elnevezett distanceoszlopot, a viselkedés hasonló lesz az oszlopnévvel rendelkező két tábla közötti SQL-illesztéshez. Ilyen esetekben tábla aliasokat kell használnia az oszlophivatkozások egyértelműsítéséhez – ellenkező esetben hiba lép fel.
Fontos
Az distance oszlop az egyetlen érvényes rendezési kulcs a hozzávetőleges vektorkeresési eredményekhez.
Limitations
-
Csak növekvő sorrendben: Az
distanceoszlopot növekvő sorrendben (ASC) kell rendezni. A csökkenő sorrend (DESC) nem támogatott.
Verzióspecifikus viselkedés
A viselkedés a VECTOR_SEARCH vektorindex verziójától függően változik.
Korábbi vektorindex-verziók
Megjegyzés:
Ezek a korlátozások csak a korábbi verziókkal létrehozott vektorindexekre vonatkoznak. Migrálás a legújabb verzióra az iteratív szűrés engedélyezéséhez. Lásd: Migrálás a korábbi vektorindex-verziókból.
Csak utószűrés: A vektorkeresés a predikátum alkalmazása előtt történik. A további predikátumok csak a leginkább hasonló vektorok visszaadása után lesznek alkalmazva. Az alábbi minta a lekérdezésvektorhoz @qvleginkább hasonló beágyazásokat tartalmazó első 10 sort adja vissza, majd alkalmazza a WHERE záradékban megadott predikátumot. Ha a vektorkeresés által visszaadott vektorokhoz társított 10 sor egyike sem rendelkezik accepted 1 oszlopmal, az eredmény üres.
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;
Általános korlátozások
VECTOR_SEARCH nem használható a nézet törzsében.
Examples
A. Alapvektor-hasonlóság keresése
Fontos
A legújabb vektorindex-verziót használó táblák lekérdezéséhez a hozzávetőleges vektorkeresésnek a szintaxist TOP (N) WITH APPROXIMATE kell használnia. Ez a szintaxiskövetelmény azt jelzi, hogy a lekérdezés explicit módon a legközelebbi szomszédhoz közeli eredményeket kéri.
Az alábbi példa a 10 leginkább hasonló cikket Pink Floyd music style találja meg a wikipedia_articles_embeddings táblázatban.
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;
A lekérdezés szintaxisa a vektorindex verziójától függ:
| Vektorindex verziója | Syntax-példa |
|---|---|
| Legutóbbi verzió | Használat SELECT TOP (N) WITH APPROXIMATE paraméter nélkül TOP_N |
| Korábbi verziók (elavult) | Paraméter használata TOP_N a függvényben VECTOR_SEARCH |
Jótanács
A vektorindex verziójának meghatározásához lásd: Migrálás a korábbi vektorindex-verziókból.
Korábbi verzióindexek esetén (elavult szintaxis):
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;
Megjegyzés:
Ha a paramétert a TOP_N legújabb verzióvektorindexekkel használja, msg 42274-es hibát ad vissza. Részletes információkért tekintse meg a Várt viselkedések szakaszban az örökölt szintaxist használó hiba című témakört.
B. Munkafolyamat befejezése indexek létrehozásával
Egy alapszintű, végpontok közötti példa a használatával CREATE VECTOR INDEX és a kapcsolódó VECTOR_SEARCH függvénnyel. A beágyazások ki vannak gúnyolva. Valós forgatókönyv esetén a beágyazások beágyazási modell és AI_GENERATE_EMBEDDINGS, vagy külső kódtár, például OpenAI SDK használatával jönnek létre.
Megjegyzés:
A legújabb verzióvektorindexekhez legalább 100 adatsor szükséges az index létrehozása előtt. Ez a példa 100 sort szúr be, hogy megfeleljen ennek a követelménynek. További információ: Minimális adatkövetelmények.
Az alábbi kódblokk a VECTOR_SEARCH modellbeágyazással rendelkező függvényt mutatja be:
- Engedélyezi az előzetes verziójú funkciót (csak az SQL Server 2025-höz szükséges; nem szükséges az Azure SQL Database-hez vagy a Fabricben található SQL Database-hez).
- Hozzon létre egy mintatáblát
dbo.Articlesegyembeddingrendelkező oszlopmal. - Szúrjon be 100 sornyi mintaadatot a mintabeágyazási adatokkal.
- Vektorindex létrehozása a oldalon
dbo.Articles.embedding - A vektoros hasonlóság keresésének bemutatása a
VECTOR_SEARCHfüggvénnyel.
-- 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;
A lekérdezés szintaxisa a vektorindex verziójától függ:
| Vektorindex verziója | Syntax-példa |
|---|---|
| Legutóbbi verzió | Használat SELECT TOP (N) WITH APPROXIMATE paraméter nélkül TOP_N |
| Korábbi verziók (elavult) | Paraméter használata TOP_N a függvényben VECTOR_SEARCH |
Korábbi verzióindexek esetén (elavult szintaxis):
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. Vektorkeresés iteratív szűréssel
Az alábbi példa az iteratív szűrést mutatja be a legújabb verzióvektorindexekkel. A lekérdezés hasonló cikkeket talál, miközben predikátumokat alkalmaz a keresési folyamat során.
A legújabb verzióindexekkel a WHERE záradék predikátumai a vektorkeresési folyamat során (nem utána) lesznek alkalmazva. A motor addig keres, amíg meg nem találja az összes feltételnek megfelelő 5 megfelelő sort:
- Vektoros hasonlóság a "gépi tanulási algoritmusokhoz"
- A kategória egyenlő a "Technológia" kategóriával
- A közzétett állapot értéke 1
Ez biztosítja, hogy pontosan 5 találatot kapjon (ha léteznek), a keresési paraméterek manuális finomhangolása nélkül. A korábbi és a legújabb verziók részletes összehasonlításáért tekintse meg az Iteratív szűrési viselkedést a Várt viselkedések szakaszban.
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;
Megjegyzés:
Bizonyos SQL-műveletek, például a GROUP BY, az aggregátumfüggvények és az ablakfüggvények al lekérdezési mintát igényelnek. További részletekért lásd: Vektorkeresés kombinálása más SQL-műveletekkel.
D. Többtáblás illesztések az INNER JOIN használatával
Az alábbi minta az INNER JOIN-t mutatja be több táblára való szűréssel. Akkor használható, ha a beágyazások a fő entitásadatoktól eltérő táblában vannak tárolva.
-- 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;
A példa főbb jellemzői:
-
Tábla alias hatóköre: A forrás aliasa
eTABLE = wikipedia_articles_embeddings AS ea WHERE záradékban érhető el az iteratív szűréshez a legújabb verzióindexekkel
Várt viselkedések
Hiba az örökölt szintaxis használatával
Ha a paramétert TOP_NVECTOR_SEARCH a legújabb verzióvektorindexkel rendelkező táblák lekérdezésekor próbálja használni, az SQL Server a következő hibát adja vissza:
Msg 42274, Level 16, State 1
Vector search with version 3 index does not support explicit TOP_N parameter.
A hiba megoldása:
-
TOP_NA paraméter eltávolítása aVECTOR_SEARCHfüggvényből - Szintaxis használata
SELECT TOP (N) WITH APPROXIMATEhelyett
Helytelen (hibát okoz a legújabb verzióindex esetén):
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;
Helyes (a legújabb verzióindexkel működik):
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;
Iteratív szűrési viselkedés
A legújabb verzió jelentős fejlesztéseket vezet be a korábbi vektorindex-verziókhoz:
| Tulajdonság | Korábbi verzió | Legutóbbi verzió |
|---|---|---|
| Predikátum alkalmazás | A relációs predikátumokat azután alkalmazták, hogy a vektorkeresés rögzített számú legközelebbi szomszédot adott vissza (csak utószűrést követően). | A relációs predikátumok alkalmazása a vektorkeresési folyamat során történik (iteratív szűrés) |
| Eredmény teljessége | A lekérdezések kevesebb sort – vagy egyetlen sort sem – adhatnak vissza, ha a kezdeti legközelebbi szomszédok nem felelnek meg a szűrőknek, még akkor sem, ha a megfelelő sorok léteztek | A lekérdezések a várt számú sort adják vissza, ha a megfelelő adatok léteznek, manuális finomhangolás vagy lekérdezés-átírás nélkül |
| TOP (N) hangolás | A felhasználóknak gyakran kellett kitalálniuk vagy túlértékelni a TOP (N) értékeket a szűrés utáni kompenzáláshoz | Nem kell kitalálni a TOP (N) értékeket. A motor addig keres, amíg elegendő megfelelő sor nem található, vagy a keresési terület kimerül |
| Lekérdezésoptimalizálás | Nem alkalmazható | Az SQL Server automatikusan kiválasztja a leghatékonyabb végrehajtási stratégiát, beleértve a vektorindex-keresések és a kNN-vizsgálatok közötti váltást, ha szükséges |
Az iteratív szűrés gyakorlati példája : C. példa: Vektorkeresés iteratív szűréssel.
ORDER BY záradékra vonatkozó követelmények
A használat során SELECT TOP (N) WITH APPROXIMATEaz ORDER BY záradéknak konkrét követelményei vannak:
- AZ ORDER BY függvénynek jelen kell lennie: Az ORDER BY záradék nélküli lekérdezések hiba miatt meghiúsulnak.
- Csak a távolságoszlop engedélyezett: Az ORDER BY záradéknak csak a VECTOR_SEARCH eredményhalmaz távolságoszlopára kell hivatkoznia. A további oszlopok belevétele hiba miatt meghiúsul. Ha több oszlop szerint szeretne rendezni, használja a Multiple ORDER BY oszlopban leírt al lekérdezési mintát.
- Csak növekvő sorrendben: A távolság oszlopot növekvő sorrendben (ASC) kell rendezni. A csökkenő sorrend (DESC) nem támogatott.
Érvényes RENDELÉSI 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
Érvénytelen ORDER BY minták:
-- 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
Viselkedés vektorindex nélkül
VECTOR_SEARCH akkor is végrehajthat lekérdezéseket, ha a céloszlopon nincs vektorindex. Index nélkül a lekérdezés teljes táblavizsgálatot végez (k-legközelebbi szomszéd (kNN) kereséssel az összes sor távolságának kiszámításához.
Lekérdezési viselkedés TOP ÉS KÖZELÍTŐ érték nélkül
Ha nem SELECT TOP (N) WITH APPROXIMATEhasználjaVECTOR_SEARCH, a lekérdezés viselkedése TOP a feltételek meglététől ORDER BY és a záradékoktól függ:
- Nincs TOP, nincs ORDER BY vagy ORDER BY nem távolság: Teljes táblázatos vizsgálat (találgatásos keresés), amely kiszámítja és visszaadja az összes sor távolságait
- TOP (nincs HOZZÁVETŐLEGES) az ORDER BY távolsággal: kNN -keresésként (k-legközelebbi szomszédok) hajtja végre, ami a legközelebbi szomszédkeresés
Példa – Teljes vizsgálat távolságoszloppal:
-- 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
Példa – kNN-keresés (pontos legközelebbi szomszédok):
-- 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
TOP WITH APPROXIMATE without VECTOR_SEARCH
Ha függvény nélkül VECTOR_SEARCH használja SELECT TOP (N) WITH APPROXIMATE a lekérdezést, az hibát eredményez. A WITH APPROXIMATE záradék megköveteli, hogy egy VECTOR_SEARCH függvény jelen legyen.
Helytelen – Ez a lekérdezés sikertelen:
-- 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);
Helyes – Használja a VECTOR_SEARCH:
-- 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-korlátozások
A vektorindexekkel rendelkező táblákat nem lehet csonkolja a használatával TRUNCATE TABLE. Az összes adat eltávolítása vektorindexelt táblából:
- A vektorindex elvetése
- A táblázat csonkálása
- A táblázat újratöltése legalább 100 sorból
- A vektorindex ismételt létrehozása
Példa munkafolyamat:
-- 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');
Táblázatos tippek vektorkereséshez
A lekérdezések végrehajtási viselkedésének szabályozásához táblázatos tippeket használhat a VECTOR_SEARCH függvénnyel. A FORCE_ANN_ONLY táblamutató arra kényszeríti a lekérdezésoptimalizálót, hogy csak a legközelebbi szomszéd (ANN) indexet használja, még akkor is, ha az optimalizáló más végrehajtási stratégiát választhat.
Szintaxis:
FROM VECTOR_SEARCH(
TABLE = table_name,
COLUMN = column_name,
SIMILAR_TO = vector_value,
METRIC = 'metric_name'
) AS alias WITH (FORCE_ANN_ONLY)
Example:
Az alábbi példa a legközelebbi szomszédindex használatát kényszeríti ki a vektorkeresési lekérdezéshez:
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;
Akkor használja FORCE_ANN_ONLY , ha meg szeretné győződni arról, hogy a lekérdezés a legközelebbi szomszédindex-stratégiát használja, felülírva az optimalizáló automatikus stratégiaválasztását.
Megjegyzés:
A használathoz FORCE_ANN_ONLY mindkettő szükséges:
- Vektorindex a céloszlopon
-
SELECT TOP (N) WITH APPROXIMATEa lekérdezésben
Ha valamelyik követelmény hiányzik, a lekérdezés meghiúsul, mert nem tudja használni a tipp által kényszeríthető legközelebbi szomszéd stratégiát.
Vektorkeresés kombinálása más SQL-műveletekkel
A VECTOR_SEARCH függvénynek TOP (N) WITH APPROXIMATE speciális követelményei vannak a használatára vonatkozóan. Egyes SQL-műveletek közvetlenül használhatók vektorkereséssel, míg másokhoz al lekérdezési minta szükséges.
Alkonyatmintát igénylő műveletek
Ha olyan műveleteket kell végrehajtania, amelyek nem kompatibilisek közvetlenül a műveletekkel TOP (N) WITH APPROXIMATE, használjon vektorkeresést egy al lekérdezésben (belső lekérdezésben), majd alkalmazza a műveleteket a külső lekérdezésben. Ez a minta fenntartja a hozzávetőleges vektorkeresés teljesítménybeli előnyeit, miközben teljes SQL-funkciókat tesz lehetővé.
Jótanács
Az al lekérdezési minta minden olyan műveletnél működik, amely nem kombinálható közvetlenül a következővel TOP (N) WITH APPROXIMATE: . Vektorkeresés alkalmazása a belső lekérdezésben, majd bármely SQL-művelet használata a külső lekérdezésben.
Gyakori forgatókönyvek
Az alábbi táblázat azokat a műveleteket sorolja fel, amelyekhez a lekérdezési minta szükséges:
| Operation | Példa használati esetre |
|---|---|
| CSOPORTOSÍTÁS ALAPJÁN | Statisztikák kiszámítása kategóriánként |
| Összesítő függvények | Összesített DARAB, AVG, MIN, MAX az eredmények között |
| Ablakfunkciók | ROW_NUMBER, RANG, DENSE_RANK, NTILE |
| Műveletek beállítása | UNION, UNION ALL, EXCEPT, INTERSECT |
| Több ORDER BY oszlop | Rendezés távolság, majd dátum vagy cím szerint |
| KÜLÖNBÖZŐ | Ismétlődő eredmények eltávolítása |
| KERESZT ALKALMAZÁSA | Vektorkeresés alkalmazása soronként a külső táblázatból |
GROUP BY és aggregátum függvények
Az alábbi példában a legjobban megfelelő cikkek átlagos távolsága található kategóriánként. Ebben a példában egy category oszlop lett hozzáadva a táblához a wikipedia_articles cikkek besorolásához.
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;
Ablakfunkciók
Az alábbi példa hasonlóság szerint rangsorolja a cikkeket, és kvartiliseket rendel hozzá.
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;
Műveletek beállítása (UNION, INTERSECT, EXCEPT)
Az alábbi példa két különböző keresési lekérdezés eredményeit egyesíti az UNION használatával.
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;
KÜLÖNBÖZŐ
Az alábbi példa különböző kategóriákat kap a legjobban megfelelő cikkektől.
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;
Több ORDER BY oszlop
Az alábbi példa a távolság, majd a címek alapján rendezi a kötelékeket.
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;
KERESZT ALKALMAZÁSA
A használat SELECT TOP (N) WITH APPROXIMATEVECTOR_SEARCHsorán nem használhatja CROSS APPLY vagy OUTER APPLY használhatja ugyanabban FROM a záradékban. Ez akkor is érvényes, ha nincs külső hivatkozás a függvényen VECTOR_SEARCH belül.
Egy lekérdezés logikailag CROSS APPLY több vektorkeresést hajt végre (a külső táblázatból soronként egyet), és az összes találatot egyetlen rendezett adatfolyamba egyesítené. A közelítő legközelebbi szomszéd algoritmus nem tudja hatékonyan egyesíteni a több független vektorkeresés eredményeit, miközben fenntartja a hozzávetőleges garanciákat és a teljesítményjellemzőket.
Hibát okozó minta:
-- 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;
Ez a minta hasonló termékeket próbál megkeresni az egyes rendelések ügyfélbeállításaihoz, de közelítő vektorkeresési tervvel nem hajtható végre.
Ajánlott minta:
Hasonló eredmények eléréséhez használjon egy alqueryt TOP (N) WITH APPROXIMATECROSS APPLY önmagában:
-- 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';
Ebben a mintában:
- Minden vektorkeresés a 10 legjobb találatra korlátozódik az al lekérdezésben
- A külső lekérdezés nem használható
WITH APPROXIMATE - Az eredmények soronként megfelelő hatókörrel vannak elosztva a külső táblázatból
Közvetlenül működő műveletek
A következő műveletek közvetlenül VECTOR_SEARCH , al lekérdezés nélkül használhatók:
- INNER JOIN – Lásd a D példát: Többtáblás illesztések az INNER JOIN használatával
- WHERE predikátumok – Iteratív vagy utólagos szűrés alkalmazása
- Egy RENDELÉS TÁVOLSÁG SZERINT