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.
A következőkre vonatkozik: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database a Microsoft Fabricben
Hozz létre egy közelítő indexet egy vektoroszlopon, hogy javítsuk a legközelebbi szomszédok kereséseinek teljesítményét. Ha többet szeretnél megtudni a vektorindexelésről és a vektorkeresésről, valamint a pontos és közelítő keresés különbségeiről, lásd a Vector Search és a vector indexes (Vektor-indexek az SQL Database Engine-ben.
A szolgáltatások elérhetősége
- Vektorindex és
VECTOR_SEARCHáltalánosan elérhető (GA) Azure SQL Database-ben, SQL adatbázis Microsoft Fabric-ben, és Azure SQL Managed Instance az Always-up-to-dateupdate policy rendszerrel. - A Vector index és
VECTOR_SEARCHaz SQL Server 2025 (17.x) és az Azure SQL Managed Instance előnézeti funkciói az SQL Server 2025 frissítési szabályzatával.
Figyelmeztetés
Elavultsági értesítés: A korábbi adatszerkezettel létrehozott vektorindexek a jelenlegi kiadásban támogatottak, de a jövőbeli verzióban visszavonulnak. A jövőbeli kompatibilitás és a legújabb vektorkereső képességekhez való hozzáférés érdekében migrálja a meglévő vektorindexeket a korábbi vektorindex verziókból való migráció szakasz lépéseivel.
SQL Server 2025 előzetesi funkció
Az SQL Server 2025-ben és az Azure SQL Managed Instance-ban az SQL Server 2025frissítési szabályzatában a vektorindexek és a VECTOR_SEARCH függvény előnézetben vannak, és változhatnak. Ehhez a funkcióhoz be kell kapcsolni az PREVIEW_FEATURESadatbázis scoped konfigurációját.
Ellenőrizd a jelenlegi korlátozásokat , mielőtt használnád.
Megjegyzés:
A vektorindexek legújabb verziója elérhető Azure SQL Database-ben, SQL adatbázis Microsoft Fabric-ben, valamint Azure SQL Managed Instance az Always-up-to-date update policy (Always -date update policy (Always- date update policy -rel.
Szemantika
Transact-SQL szintaxis konvenciók
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" } ]
[;]
Érvek
index_name
Az index neve. Az indexneveknek egyedinek kell lenniük egy táblában, de nem kell egyedinek lenniük az adatbázisban. Az indexneveknek az azonosítók szabályait kell követnie.
objektum
Tábla, amelyen az index létrejön. Alaptáblának kell lennie. A nézetek, a helyi és a globális ideiglenes táblák nem támogatottak.
vector_column
A vektorindex létrehozásához használandó oszlop. Vektor típusúnak kell lennie.
METRIKUS
A két vektor közötti távolság kiszámításához használandó távolságmetrika nevével rendelkező sztring. A következő távolságmetrikák támogatottak:
-
cosine- Koszinusz távolság -
euclidean- Euklideszi távolság -
dot- (Negatív) Pont termék
TYPE
Az index létrehozásához használt ANN algoritmus típusa. Jelenleg csak DiskANN támogatott. A DiskANN az alapértelmezett érték.
MAXDOP
Felülbírálja az indexművelet maximális párhuzamossági fokát. További információ: kiszolgálókonfiguráció: a párhuzamosság maximális foka. A MAXDOP használatával korlátozhatja a párhuzamosság mértékét és az eredményként kapott erőforrás-felhasználást az index buildelési műveletéhez.
max_degree_of_parallelism lehet:
1Letiltja a párhuzamos tervgenerálást.
>
1A párhuzamos indexműveletekben használt párhuzamosság maximális fokát a megadott számra vagy annál kisebbre korlátozza az aktuális rendszerterhelés alapján.
0(alapértelmezett)A kiszolgáló, adatbázis vagy számítási feladatcsoport szintjén megadott párhuzamosság mértékét használja, kivéve, ha az aktuális rendszerterhelés alapján csökken.
További információ: Párhuzamos indexelési műveletek konfigurálása.
A párhuzamos indexműveletek nem érhetők el az SQL Server minden kiadásában. Az SQL Server kiadásai által támogatott funkciók listájáért lásd: Az SQL Server 2025 Kiadásai és támogatott funkciói.
Vektorindexek frissítése a legújabb verzióra
Fontos
Kikapcsolódási értesítés: A jelenlegi kiadás támogatja a korábbi adatszerkezet használatával létrehozott vektorindexeket, de a jövőbeli verzió megszünteti ezt a támogatást. A jövőbeni kompatibilitás és a legújabb vektorkeresési képességekhez való hozzáférés érdekében a meglévő vektorindexeket a következő lépésekkel migráljuk.
Az újonnan létrehozott vektorindexek automatikusan a legújabb adatstruktúrát használják, amely a következőt biztosítja:
-
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. Most
INSERTmár ,UPDATE,DELETE, ésMERGEműveleteket végezhetsz anélkül, hogy megőrized a vektorindex funkciót automatikus, valós idejű indexkarbantartással. -
Iteratív szűrés: Predikátumokat alkalmaz a
WHEREklauzulában a vektorkeresés során, nem a lekérdezés után. - Optimalizálóvezérelt: A lekérdezésoptimalizáló automatikusan eldönti, hogy a DiskANN indexet vagy a kNN keresést használja a lekérdezés jellemzői alapján.
- Fejlett kvantálás: Integrálja a vektoros kvantálási technikákat, hogy jobb tárolási hatékonyságot és gyorsabb lekérdezési teljesítményt biztosítson. Ezek az optimalizációk átláthatóak a felhasználók számára.
A korábbi vektorindex verzió korlátozásairól a Korlátozások és megfontolások szekcióban találod a részleteket.
Migrálás korábbi vektorindex-verziókból
A legújabb képességek engedélyezéséhez el kell dobni és újraalkotni olyan vektorindexeket, amelyek korábbi verziót használnak. Ez a szakasz bemutatja, hogyan azonosíthatja, migrálhatja és ellenőrizheti a vektorindex verzióit.
1. lépés: Meglévő vektorindexek azonosítása
A következő lekérdezés segítségével azonosíthatja a migrálást igénylő vektorindexeket:
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;
Hogyan értelmezzük az eredményeket
A legújabb verziót használja
- Már támogatja az iteratív szűrést, a teljes DML támogatást, optimalizálóvezérelt végrehajtást és a továbbfejlesztett kvantálást.
- Nem szükséges migráció.
Korábbi verzióval létrehozva
- Régi utószűrő viselkedést használ.
- Nem támogatja a legújabb vektorkereső funkciókat.
- A migráció erősen ajánlott a jövőbeli kompatibilitás érdekében.
2. lépés: A vektorindex elvetése és újbóli létrehozása
Nem lehet fejleszteni olyan vektorindexeket, amelyek korábbi formátumot használnak. A Legújabb DiskANN-képességek engedélyezéséhez vesse el és hozza létre újra az indexet.
Figyelmeztetés
A szolgáltatás hatása: A vektorindex elvetése azonnal letiltja a hozzávetőleges vektorkeresést az érintett táblán, amíg az index újra létre nem jön. Tervezze meg a migrálást az éles rendszerek karbantartási időszakában.
A meglévő index elvetése
DROP INDEX vec_idx ON dbo.wikipedia_articles;
Az index ismételt létrehozása
CREATE VECTOR INDEX vec_idx
ON dbo.wikipedia_articles (title_vector)
WITH (
TYPE = 'DISKANN',
METRIC = 'COSINE'
);
Megjegyzés:
A jelenlegi CREATE VECTOR INDEX állítás használatával létrehozott vektorindexek automatikusan a legfrissebb DiskANN formátumot használják. Nincs szükség további beállításokra vagy jelzőkre.
3. lépés: Az index verziójának ellenőrzése
Miután újrahoztad az indexet, ellenőrizd, hogy a legfrissebb verziót használja:
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';
Az index_version oszlopnak a legújabb verzióhoz kell megjelennie 3 .
Hiba viselkedése a verziókompatibilitással
Ha a paramétert TOP_NVECTOR_SEARCH egy legújabb verzióvektorindexkel 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ásához távolítsa el a paramétert, TOP_NVECTOR_SEARCH és használja helyette a szintaxist SELECT TOP (N) WITH APPROXIMATE . Részletes információkért tekintse meg az örökölt szintaxist használó hiba című témakört.
Korlátok és megfontolások
A vektorindex korábbi verzióinak korlátozásai
A korábbi vektorindex verzióknak a következő korlátai vannak. Az index verziójának ellenőrzéséhez tekintse meg az indexverzió ellenőrzését.
Csak utószűrés: A predikátumok csak vektorkeresés után érvényesek, nem a keresési folyamat során. Ez a viselkedés kevesebb sor visszatérését eredményezheti, mint amennyit szűrők alkalmazása során várnánk.
Írásvédett táblák: A vektorindexekkel rendelkező táblák írásvédettek. Nem lehet DML műveleteket (
INSERT,UPDATE,DELETEMERGE, ) végrehajtani a vektorindex létrehozása után. Az adatbázis hatókörébe tartozó konfigurációval engedélyezheti aALLOW_STALE_VECTOR_INDEXDML-műveleteket, ha el tudja viselni az elavult keresési eredményeket.Manuális TOP_N hangolás: Manuálisan kell beállítani a
TOP_NparamétertVECTOR_SEARCH, hogy kompenzáld a szűrés utáni szűrést. Gyakran túl nagy értékekre van szükséged ahhoz, hogy elérd a kívánt eredményt.A táblának elsődleges kulcscsoportos indexet kell tartalmaznia egy int oszlopon.
Jelenlegi korlátozások (a legújabb verzióra is érvényesek)
Az aktuális előzetes verzióra az alábbi korlátozások vonatkoznak:
Nem lehet vektorindexeket felosztani.
A vektorindexek nem replikálódnak az előfizetőkre.
Vektorindexű táblákat nem lehet lerövidíteni .
TRUNCATE TABLEAz összes adat eltávolításához először ejtse le a vektorindexet, csonkítsa a táblát, töltse fel újra legalább 100 sortal, majd hozza létre újra az indexet. További információért lásd: TRUNCATE TABLE korlátozások.Vektorindexeket nem lehet telepíteni DacPac-szal. Olyan adatbázisokat telepíthetsz, amelyek vektorindexeket tartalmaznak, BACPAC-tól kezdve a DacFx 170.5.96-os verziótól. A vektorindexeket a táblázat adatai betöltése után hozzák létre, és az indexelt táblának legalább 100 sorban kell lennie, amelyek nem
NULLvektorértékeket tartalmaznak.Egy sémá-alapú DACPAC telepítés során a telepítés sikeres lehet anélkül, hogy létrehoznánk vektorindexet, ha a céltáblában kevesebb mint 100 sor található, amelyek nem
NULLvektorértékeket tartalmaznak. A DacFx nem hozza létre automatikusan a kihagyott indexet, amikor később sorokat adnak hozzá. Legalább 100 minősítő sor betöltése után hozzuk létre a vektorindexet egy telepítés utáni szkripttel, a DACPAC-ot újra kiadva, vagy futtatvaCREATE VECTOR INDEX.Importálás vagy telepítés után ellenőrizd, hogy a vektorindex létrejött-e .
sys.vector_indexesA DacFx 170.5.96-os verzió előtt megoldásként dobd el a vektorindexeket az adatbázis exportálása előtt, és importálás után hozd létre újra az indexeket.
Minimális adatkövetelmények
A vektorindexekhez minimális számú sorra van szükség, amelyek nemNULL vektorértékeket tartalmaznak, mielőtt létrehozhatnánk az indexet.
-
Minimális sorszám: A táblázatnak legalább 100 sornak kell lennie, amelyek nem
NULLvektorértéke. - Hibaviselkedés: Ha megpróbálsz vektorindexet létrehozni egy táblázaton, amelynek 100 sornál kevesebb van, a művelet megbukik, és a 42266-os üzenet hibát adja vissza.
Példahiba:
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.
Ajánlott eljárás: A vektorindex létrehozása előtt töltse fel a táblát legalább 100 sortal. Fejlesztési és tesztelési helyzeteknél, ahol kevesebb sorra van szükség, VECTOR_SEARCH indexek nélkül brute-force szkenneléssel működik. Ez a módszer azonban nagyobb adathalmazok teljesítményét romla.
DML-támogatás
Amikor a legújabb verzióval létrehozol egy DiskANN vektorindexet, a tábla már nem csak olvasható. Az adatokat módosíthatod szabványos adatkezelő nyelvi (DML) műveletek segítségével, és a változások automatikusan megjelennek a vektorkereső eredményekben.
Ez a funkció alkalmassá teszi a vektorkeresést olyan élő, tranzakciós számítási feladatokhoz, ahol az adatok idővel változnak.
Viselkedési megjegyzések
- A DML-műveletekhez nem szükséges a vektorindex elvetése vagy újraépítése.
- A módosítások a tranzakció véglegesítése után láthatók a vektorkeresési lekérdezésekben.
- Nagy léptékű adatcsere esetén (például a legtöbb sor törlése és egy teljesen új beágyazási csoport beszúrása) fontolja meg a vektorindex elvetését és újbóli hozzáadását az adatbetöltés után az optimális keresési minőség biztosítása érdekében.
Megjegyzés:
A DML támogatás csak a legújabb verzióval létrehozott vektorindexekkel érhető el. A korábbi verziók megkövetelik, hogy a táblák írásvédettek legyenek, vagy az ALLOW_STALE_VECTOR_INDEX adatbázis-hatókörű konfigurációt használják.
Vektorindex karbantartásának monitorozása
A vektorindexek háttérkarbantartást végeznek a DML-módosítások beépítéséhez. A sys.dm_db_vector_indexes dinamikus felügyeleti nézettel figyelheti az index állapotának és karbantartási tevékenységének állapotát.
Vektorindexek és hagyományos indexek kombinálása
A vektorindexek a hagyományos B-fa indexekkel együtt működnek az optimális lekérdezési teljesítmény érdekében. Ha iteratív szűrést VECTOR_SEARCHhasznál, érdemes lehet hagyományos indexeket létrehozni a szűrési predikátumokban használt oszlopokon.
Az iteratív szűrés viselkedésével és a korábbi verzióktól való eltérésével kapcsolatos részletes információkért tekintse meg az Iteratív szűrési viselkedést.
Jótanács
A lekérdezésoptimalizáló automatikusan kiválasztja a legjobb végrehajtási stratégiát (a legközelebbi szomszédindex és a kNN-keresés). A legközelebbi szomszédindex használatának kényszerítéséhez használja a táblamutatót FORCE_ANN_ONLY . További információkért tekintse meg a vektorkeresésre vonatkozó táblázatos tippeket.
Példaforgatókönyv:
-- 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);
Teljesítménybeli előny:
A lekérdezések iteratív szűréssel történő végrehajtásakor az SQL Server lekérdezésoptimalizálója mindkét indextípust használja:
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;
Ebben a lekérdezésben:
- A vektorindex hasonló beágyazásokat azonosít a lekérdezésvektor alapján
- A hagyományos index hatékonyan szűri a
(category)jelölteket az iteratív keresési folyamat során
Ez az összetett stratégia jelentősen javíthatja a lekérdezési teljesítményt ahhoz képest, hogy csak vektorindexet használ, különösen akkor, ha a szűrési predikátumok nagy szelektivitásúak.
Adatminőségi és karbantartási útmutató vektorindexekhez
Kerülje a magas duplikált beágyazással rendelkező adathalmazokat
A vektorindexelés akkor működik a legjobban, ha a beágyazások különböző szemantikai tartalmakat jelölnek. Ne használj olyan adathalmazokat, amelyekben magas arányban van duplikált vektorok a vektorindexhez.
A magas duplikáció a következőhöz vezethet:
- Gyenge eredményminőség: Ismétlődő vektorok jelennek meg ismételten az eredményekben, és kiszorulnak a relevánsabb szemantikai egyezések.
- Csökkentett hatékonyság: A duplikált beágyazások elmozdítják a jobb szomszédokat, csökkentve a hasonlóság keresésének hasznosságát.
- Szükségtelen erőforrás-használat: A vektorindexek létrehozása és karbantartása költséges, az ismétlődések pedig érték hozzáadása nélkül növelik a költségeket.
Ajánlott eljárás: A vektorindex létrehozása előtt deduplikálja a beágyazásokat a teljesítmény és az eredményminőség javítása érdekében.
Nagy léptékű adatcserés forgatókönyvek
A vektorindexek támogatják a beszúrásokat, frissítéseket és törléseket. Azonban, amikor a legtöbb vagy az összes beágyazást lecseréled – például egy adathalmazt új modellre ágyazsz be –, a meglévő index már nem tükrözheti az új adateloszlást.
Nagy léptékű csereforgatókönyvekben:
- A vektoros keresési lekérdezések továbbra is érvényes eredményeket adnak.
- A visszahívás és rangsorolás minősége romlanulhat, mert az indexstruktúrát egy másik beágyazott eloszlásra építették.
Ajánlott eljárás: Ha majdnem teljes adatcserét végez (friss beágyazások törlése és beszúrása), az új adatok betöltése után ejtse le és hozza létre újra a vektorindexet. Az index újraépítése biztosítja, hogy az új beágyazási disztribúcióhoz legyen optimalizálva, és visszaállítsa a kiszámítható lekérdezési viselkedést.
Ismert problémák
További információkért tekintse át az ismert problémákat.
Engedélyek
Engedély kell ALTER az asztalon.
Példák
Töltse le és importálja a Wikipedia-cikket vektoros beágyazási mintával .
Ezek a példák egy táblázatot feltételeznek wikipedia_articles , amelynek neve egy oszlop title_vectorvector található, amely tárolja a Wikipédia-cikkek címbeágyazásait. Olyan title_vector beágyazási modellt használ, mint a text-embedding-ada-002 vagy text-embedding-3-small, amely 1 536 dimenziós vektorokat ad vissza.
További példákért, beleértve a végponttól végpontig megoldásokat is, lásd az Azure SQL Database Vector Search Samples GitHub repo címet.
1. példa
Az alábbi példa egy vektorindexet hoz létre az oszlopon a title_vectorcosine metrika használatával.
CREATE VECTOR INDEX vec_idx
ON [dbo].[wikipedia_articles] ([title_vector])
WITH (METRIC = 'COSINE', TYPE = 'DISKANN');
2. példa
A következő példa vektorindexet hoz létre az title_vector oszlopon a (negatív) dot szorzatmetrika segítségével. A párhuzamosságot 8-ra korlátozza, és a vektort a SECONDARY fájlcsoportban tárolja.
CREATE VECTOR INDEX vec_idx
ON [dbo].[wikipedia_articles] ([title_vector])
WITH (METRIC = 'DOT', TYPE = 'DISKANN', MAXDOP = 8)
ON [SECONDARY];
3. példa
Ez a példa a kapcsolódó függvényt használjaCREATE VECTOR INDEX.VECTOR_SEARCH A beágyazások ki vannak gúnyolva. Valós helyzetben beágyazás generálható beágyazási modell és AI_GENERATE_EMBEDDINGS használatával, vagy külső könyvtárat, például OpenAI SDK-t használ.
Megjegyzés:
A legújabb verziójú vektorindexekhez legalább 100 sor adatot kell megszerezni, mielőtt létrehozhatod az indexet. 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.
A következő kódblokk a makettbeágyazással CREATE VECTOR INDEX szemlélteti:
- Engedélyezze az előnézeti funkciót (csak az SQL Server 2025-höz szükséges; Azure SQL Database vagy SQL database in Fabric esetén nem szükséges).
- 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
) AS s
ORDER BY s.distance, t.title;
4. példa: DML-műveletek használata
Az alábbi példák bemutatják a DML műveleteket egy táblázaton, amelynek vektorindexe a legfrissebb verzióval készült.
Sorok törlése
A sorok törlése eltávolítja őket a táblázatból és a vektorkeresési eredményekből is.
DELETE FROM dbo.wikipedia_articles
WHERE id = 12345;
A törlés befejezése után a eltávolított sor már nem jelenik meg vektorkereső lekérdezésekben.
Új sorok beszúrása
Beágyazással új sorokat szúrhat be, és az index újraépítése nélkül azonnal kereshetővé válnak.
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)
);
Az újonnan beszúrt beágyazások automatikusan bekerülnek a vektorindexbe, és a következő vektorkeresési lekérdezések is visszaadhatók.
Meglévő sorok frissítése
A vektor- vagy nem vektoroszlopok frissítése teljes mértékben támogatott.
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;
Ha frissítesz egy vektoroszlopot, az index ennek megfelelően frissül, így a jövőbeli vektorkeresések az új beágyazást használják.
Komplex műveletekhez való felhasználás MERGE
Az MERGE utasítással egyetlen utasításban hajthat végre beszúrási, frissítési és törlési műveleteket.
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;
A vektorindex automatikusan frissül, hogy tükrözze az állítás által végrehajtott összes változtatást MERGE .