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
Hozzon létre egy hozzávetőleges indexet egy vektoroszlopon a legközelebbi szomszédkeresés teljesítményének javítása érdekében. 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. A folytatás előtt ellenőrizze a korlátozásokat és szempontokat .
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.
Figyelmeztetés
Elavulási értesítés: A korábbi adatstruktúrával létrehozott vektorindexek támogatottak az aktuális kiadásban, de egy későbbi verzióban lesznek kivonva. A jövőbeli kompatibilitás és a legújabb vektorkeresési képességekhez való hozzáférés biztosítása érdekében migrálja a meglévő vektorindexeket a migrálás korábbi vektorindex-verziókról való áttelepítésének lépéseivel.
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.
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.
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.
>1
A 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.
Megjegyzés:
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 2022 vagyaz SQL Server 2025 kiadásai és támogatott funkciói kiadásai és támogatott funkciói.
Vektorindexek frissítése a legújabb verzióra
Fontos
Elavulási értesítés: A korábbi adatstruktúrával létrehozott vektorindexek támogatottak az aktuális kiadásban, de egy későbbi verzióban lesznek kivonva. A jövőbeli kompatibilitás és a legújabb vektorkeresési képességek elérése érdekében az alábbi lépések végrehajtásával migrálja a meglévő vektorindexeket.
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. 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
A vektorindex korábbi verzióira vonatkozó korlátozásokról a Korlátozások és szempontok című szakaszban tájékozódhat.
Migrálás korábbi vektorindex-verziókból
A legújabb képességek engedélyezéséhez el kell dobni és újra létre kell hozni a korábbi verzióval létrehozott vektorindexeket. 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, az optimalizálóalapú végrehajtást és a jobb kvantálást
- Nincs szükség migrálásra
Korábbi verzióval létrehozva
- Örökölt utószűrési viselkedést használ
- Nem támogatja a legújabb vektorkeresési képességeket
- A migrálás erősen ajánlott a jövőbeli kompatibilitás biztosítása érdekében
2. lépés: A vektorindex elvetése és újbóli létrehozása
A korábbi formátummal létrehozott vektorindexek nem frissíthetők a helyén. 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:
Az aktuális CREATE VECTOR INDEX utasítással létrehozott vektorindexek automatikusan a legújabb 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
A kikapcsolódás után ellenőrizze, hogy az index a legújabb verziót használja-e:
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ókra az alábbi további korlátozások vonatkoznak. 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 a vektorok lekérése után lesznek alkalmazva, a keresési folyamat során nem. Ez a szűrők alkalmazásakor a vártnál kevesebb sort eredményezhet.
Írásvédett táblák: A vektorindexekkel rendelkező táblák írásvédettek. A vektorindex létrehozása után a DML-műveletek (INSERT, UPDATE, DELETE, MERGE) nem engedélyezettek. Az adatbázis hatókörébe tartozó konfigurációval engedélyezheti a
ALLOW_STALE_VECTOR_INDEXDML-műveleteket, ha el tudja viselni az elavult keresési eredményeket.Manuális TOP_N finomhangolás: Manuálisan kell beállítania a paramétert
TOP_N, hogy kompenzálja azVECTOR_SEARCHutólagos szűrést, és gyakran túlméretezett értékeket igényel a kívánt számú eredmény eléréséhez.
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:
A vektorindexek nem particionálhatók. Nincs partíciótámogatás.
A táblának elsődleges kulcsú fürtözött indexel kell rendelkeznie.
A vektorindexek nem replikálódnak az előfizetőkre.
A vektorindexekkel rendelkező táblák nem csonkhatók a használatával
TRUNCATE TABLE. Az ö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ó: TRUNCATE TABLE korlátozások.A vektorindexek nem helyezhetők üzembe a DacPac vagy a BACPAC használatával. A vektorindexek létrehozásakor legalább 100 sorra van szükség nem NULL vektorokkal. Amikor dacPac, BACPAC vagy importálási/exportálási szolgáltatással importál egy adatbázist, az importálási folyamat sémaobjektumokat (beleértve a vektorindexeket) hoz létre az adatok betöltése előtt, ami az importálás meghiúsulását okozza.
Megkerülő megoldás: Az adatbázis exportálása előtt ejtse el a vektorindexeket, és hozza létre újra az indexeket az importálás után.
Minimális adatkövetelmények
A vektorindexek minimális számú, nem NULL vektorértékkel rendelkező sort igényelnek az index létrehozása előtt.
- Minimális sorszám: Legalább 100 sornak nem NULL vektorértékekkel kell rendelkeznie a táblában.
- Hibaviselkedés: Ha egy 100-nál kevesebb sort tartalmazó táblán próbál vektorindexet létrehozni, az Msg 42266 hibával meghiúsul.
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. Olyan fejlesztési és tesztelési forgatókönyvek esetében, ahol kevesebb sorra van szükség, VECTOR_SEARCH index nélkül működik találgatásos vizsgálati módszerrel, bár a teljesítmény nagyobb adathalmazokkal csökken.
DML-támogatás
Miután létrehozta a DiskANN-vektorindexet a legújabb verzióval, a tábla már nem írásvédett. Az adatok szabadon módosíthatók standard adatmanipulációs nyelvi (DML) műveletekkel, és a változások automatikusan megjelennek a vektorkeresési 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. A vektorindexeléshez nem ajánlott az ismétlődő vektorok nagy hányadával rendelkező adathalmazok használata.
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. Ha azonban a legtöbb vagy az összes beágyazást lecserélik – például egy adathalmaz új modellel való újbóli beágyazását –, a meglévő index nem feltétlenül tükrözi az új adateloszlást.
Nagy léptékű csereforgatókönyvekben:
- A vektorkeresési lekérdezések továbbra is érvényes eredményeket adnak vissza
- A visszahívás és a rangsorolás minősége azonban romlhat, mivel az indexszerkezet egy másik beágyazási eloszláshoz készült.
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
A felhasználónak engedéllyel kell rendelkeznie ALTER a táblában.
Példák
Töltse le és importálja a Wikipedia-cikket vektoros beágyazási mintával .
A példák feltételezik, hogy létezik olyan tábla wikipedia_articles , amelynek neve egy olyan oszlop title_vector , vector amely a Wikipédia-cikkek címbe ágyazását tárolja.
title_vector a rendszer feltételezi, hogy egy beágyazási modell, például text-embedding-ada-002 vagy text-embedding-3-small beágyazással létrehozott beágyazás, amely 1536 dimenziójú vektorokat ad vissza.
További példákat, például a végpontok közötti megoldásokat az Azure SQL Database Vektorkeresési minták GitHub-adattárában találja.
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
Az alábbi példa egy vektorindexet hoz létre az title_vector oszlopon a (negatív) dot termékmetrika használatával, 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
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.
A következő kódblokk a makettbeágyazással CREATE VECTOR INDEX szemlélteti:
- 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
) AS s
ORDER BY s.distance, t.title;
4. példa: DML-műveletek használata
Az alábbi példák a legújabb verzióval létrehozott vektorindexkel rendelkező táblák DML-műveleteit mutatják be.
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 az eltávolított sor már nem jelenik meg a vektorkeresési 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 egy vektoroszlop frissül, az index ennek megfelelően frissül, így a jövőbeli vektorkeresések az új beágyazást használják.
A MERGE használata összetett műveletekhez
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 utasítás által végrehajtott összes módosítást MERGE .