Delen via


MAAK VECTORINDEX AAN (Transact-SQL) (Voorbeeld)

Van toepassing op: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

Maak een geschatte index op een vectorkolom om de prestaties van dichtstbijzijnde buren te verbeteren. Raadpleeg vectorzoekopdrachten en vectorindexen in de SQL Database Engine voor meer informatie over hoe vectorindexering en vectorzoekopdrachten werken, en de verschillen tussen exacte en geschatte zoekopdrachten.

Azure SQL Database en SQL Database in Fabric

De functie is in preview. Controleer beperkingen en overwegingen voordat u doorgaat.

Opmerking

Omdat het om een preview-functie gaat, is de technologie die in dit artikel wordt behandeld onderhevig aan de Aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews.

Waarschuwing

Afschaffingsmelding: Vectorindexen die zijn gemaakt met een eerdere gegevensstructuur, worden ondersteund in de huidige release, maar worden buiten gebruik gesteld in een toekomstige versie. Voor toekomstige compatibiliteit en toegang tot de nieuwste vectorzoekmogelijkheden migreert u bestaande vectorindexen met behulp van de stappen in de sectie Migreren van eerdere vectorindexversies .

Regionale beschikbaarheid

Deze functie wordt geïmplementeerd in Azure SQL Database en SQL Database in Microsoft Fabric. Tijdens de implementatie kan de beschikbaarheid en het gedrag per regio en per indexversie verschillen. Als een functie of syntaxis niet beschikbaar is, wordt deze automatisch beschikbaar zodra de implementatie is voltooid. Zie Beschikbaarheid van functies per regio voor de huidige regionale beschikbaarheidsstatus.

SQL Server 2025 Preview-functie

In SQL Server 2025 is deze functie in previewversie en kan deze worden gewijzigd. Als u deze functie wilt gebruiken, moet u de configuratie van het PREVIEW_FEATURESdatabasebereik inschakelen.

Zorg ervoor dat u de huidige beperkingen bekijkt voordat u deze gebruikt.

Opmerking

De nieuwste versie van Vector Indexes is momenteel alleen beschikbaar in Azure SQL Database en SQL Database in Microsoft Fabric.

Syntaxis

Transact-SQL syntaxis-conventies

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" } ]
[;]

Argumenten

index_name

De naam van de index. Indexnamen moeten uniek zijn binnen een tabel, maar hoeven niet uniek te zijn binnen een database. Indexnamen moeten de regels van id's volgen.

object

Tabel waarop de index wordt gemaakt. Het moet een basistabel zijn. Weergaven, tijdelijke tabellen, zowel lokaal als globaal, worden niet ondersteund.

vector_column

Kolom die moet worden gebruikt om de vectorindex te maken. Het moet van vectortype zijn.

METRIEK

Een tekenreeks met de naam van de metrische afstand die moet worden gebruikt om de afstand tussen de twee opgegeven vectoren te berekenen. De volgende metrische gegevens over afstand worden ondersteund:

  • cosine - Cosinusafstand
  • euclidean - Euclidische afstand
  • dot - (Negatief) Dot-product

TYPE

Het type ANN-algoritme dat wordt gebruikt om de index te bouwen. Alleen DiskANN wordt momenteel ondersteund. DiskANN is de standaardwaarde.

MAXDOP

Overschrijft de maximale mate van parallelle uitvoering configuratieoptie voor de indexbewerking. Zie Serverconfiguratie: maximale mate van parallelle uitvoeringvoor meer informatie. Gebruik MAXDOP om de mate van parallelle uitvoering en het resulterende resourceverbruik voor een indexbuildbewerking te beperken.

max_degree_of_parallelism kan het volgende zijn:

  • 1

    Onderdrukt het genereren van parallelle plannen.

  • >1

    Hiermee beperkt u de maximale mate van parallelle uitvoering die wordt gebruikt in een parallelle indexbewerking tot het opgegeven getal of minder op basis van de huidige systeemworkload.

  • 0 (standaard)

    Maakt gebruik van de mate van parallelle uitvoering die is opgegeven op server-, database- of workloadgroepsniveau, tenzij verminderd op basis van de huidige systeemworkload.

Zie Parallelle indexbewerkingen configurerenvoor meer informatie.

Opmerking

Parallelle indexbewerkingen zijn niet beschikbaar in elke editie van SQL Server. Voor een lijst van functies die worden ondersteund door de edities van SQL Server, zie Edities en ondersteunde functies van SQL Server 2022 of Edities en ondersteunde functies van SQL Server 2025.

Vectorindexen upgraden naar de nieuwste versie

Belangrijk

Afschaffingsmelding: Vectorindexen die zijn gemaakt met een eerdere gegevensstructuur, worden ondersteund in de huidige release, maar worden buiten gebruik gesteld in een toekomstige versie. Migreer bestaande vectorindexen met behulp van de onderstaande stappen om toekomstige compatibiliteit en toegang tot de nieuwste vectorzoekmogelijkheden te garanderen.

Nieuw gemaakte vectorindexen maken automatisch gebruik van de meest recente gegevensstructuur, die het volgende biedt:

  • Volledige DML-ondersteuning: hiermee verwijdert u de vorige beperking die vector-geïndexeerde tabellen alleen-lezen heeft gemaakt na het maken van de index. U kunt nu INSERT-, UPDATE-, DELETE- en MERGE-bewerkingen uitvoeren met behoud van vectorindexfunctionaliteit met automatisch, realtime indexonderhoud
  • Iteratieve filtering: Predicaten in de WHERE-component worden toegepast tijdens het vectorzoekproces, niet na het ophalen
  • Optimalisatiegestuurd: De queryoptimalisatie bepaalt automatisch of de DiskANN-index of kNN-zoekopdracht moet worden gebruikt op basis van querykenmerken
  • Geavanceerde kwantisatie: Vector kwantisatietechnieken zijn geïntegreerd om betere opslagefficiëntie en snellere queryprestaties te bieden, waarbij deze optimalisaties transparant zijn voor gebruikers

Zie de sectie Beperkingen en overwegingen voor meer informatie over eerdere beperkingen voor vectorindexversies.

Migreren van eerdere vectorindexversies

Vectorindexen die zijn gemaakt met een eerdere versie, moeten worden verwijderd en opnieuw worden gemaakt om de nieuwste mogelijkheden in te schakelen. In deze sectie wordt uitgelegd hoe u vectorindexversies identificeert, migreert en verifieert.

Stap 1: Bestaande vectorindexen identificeren

Gebruik de volgende query om vectorindexen te identificeren waarvoor migratie is vereist:

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;
De resultaten interpreteren

Maakt gebruik van de nieuwste versie

  • Ondersteunt al iteratieve filtering, volledige DML-ondersteuning, geoptimaliseerde uitvoering en verbeterde kwantisatie
  • Geen migratie vereist

Gemaakt met een eerdere versie

  • Gebruikt verouderd gedrag na het filteren
  • Biedt geen ondersteuning voor de nieuwste vectorzoekmogelijkheden
  • Migratie wordt sterk aanbevolen om toekomstige compatibiliteit te garanderen

Stap 2: de vectorindex verwijderen en opnieuw maken

Vectorindexen die zijn gemaakt met een eerdere indeling, kunnen niet worden bijgewerkt. Als u de nieuwste mogelijkheden van DiskANN wilt inschakelen, verwijdert u de index en maakt u deze opnieuw.

Waarschuwing

Gevolgen voor de service: als u een vectorindex verwijdert, wordt het zoeken naar vectoren in de betreffende tabel onmiddellijk uitgeschakeld totdat de index opnieuw wordt gemaakt. Plan migraties tijdens onderhoudsvensters voor productiesystemen.

De bestaande index verwijderen
DROP INDEX vec_idx ON dbo.wikipedia_articles;
De index opnieuw maken
CREATE VECTOR INDEX vec_idx
    ON dbo.wikipedia_articles (title_vector)
    WITH (
        TYPE = 'DISKANN',
        METRIC = 'COSINE'
    );

Opmerking

Vectorindexen die zijn gemaakt met de huidige CREATE VECTOR INDEX instructie, gebruiken automatisch de nieuwste DiskANN-indeling. Er zijn geen extra opties of vlaggen vereist.

Stap 3: De indexversie controleren

Controleer na de recreatie of de index de nieuwste versie gebruikt:

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';

De index_version kolom moet worden weergegeven 3 voor de nieuwste versie.

Foutgedrag met versie-incompatibiliteit

Als u de parameter TOP_N probeert te gebruiken VECTOR_SEARCH met een meest recente versievectorindex, retourneert SQL Server de volgende fout:

Msg 42274, Level 16, State 1
Vector search with version 3 index does not support explicit TOP_N parameter.

Als u deze fout wilt oplossen, verwijdert u de TOP_N parameter uit VECTOR_SEARCH en gebruikt u in plaats daarvan de SELECT TOP (N) WITH APPROXIMATE syntaxis. Zie Fout met verouderde syntaxis voor gedetailleerde informatie.

Beperkingen en overwegingen

Beperkingen van eerdere vectorindexversies

Eerdere vectorindexversies hebben de volgende aanvullende beperkingen. Zie De indexversie controleren om de indexversie te controleren.

  • Alleen na filteren: predicaten worden pas toegepast na het ophalen van vectoren, niet tijdens het zoekproces. Dit kan resulteren in minder rijen die worden geretourneerd dan verwacht wanneer filters worden toegepast.

  • Alleen-lezen tabellen: tabellen met vectorindexen zijn alleen-lezen. Er zijn geen DML-bewerkingen (INSERT, UPDATE, DELETE, MERGE) toegestaan nadat de vectorindex is gemaakt. Gebruik de ALLOW_STALE_VECTOR_INDEX databaseconfiguratie om DML-bewerkingen in te schakelen als u verouderde zoekresultaten kunt tolereren.

  • Handmatig TOP_N afstemmen: u moet de TOP_N parameter VECTOR_SEARCH handmatig aanpassen om te compenseren voor nafiltering, waarbij vaak te veel waarden nodig zijn om het gewenste aantal resultaten te verkrijgen.

Huidige beperkingen (geldt ook voor de nieuwste versie)

De huidige preview heeft de volgende beperkingen:

  • Vectorindexen kunnen niet worden gepartitioneerd. Geen partitieondersteuning.

  • De tabel moet een geclusterde primaire sleutelindex hebben.

  • Vectorindexen worden niet gerepliceerd naar abonnees.

  • Tabellen met vectorindexen kunnen niet worden afgekapt met behulp van TRUNCATE TABLE. Als u alle gegevens wilt verwijderen, moet u eerst de vectorindex verwijderen, de tabel afkappen, opnieuw vullen met ten minste 100 rijen en vervolgens de index opnieuw maken. Zie TRUNCATE TABLE-beperkingen voor meer informatie.

  • Vectorindexen kunnen niet worden geïmplementeerd met DacPac of BACPAC. Vectorindexen vereisen ten minste 100 rijen met niet-NULL-vectoren tijdens het maken. Wanneer u een database importeert met DacPac, BACPAC of de Import/Export-service, worden tijdens het importproces schemaobjecten (inclusief vectorindexen) gemaakt voordat gegevens worden geladen, waardoor het importeren mislukt.

    Tijdelijke oplossing: Verwijder vectorindexen voordat u de database exporteert en maak de indexen opnieuw na het importeren.

Minimale gegevensvereisten

Voor vectorindexen is een minimum aantal rijen met niet-NULL-vectorwaarden vereist voordat de index kan worden gemaakt.

  • Minimumaantal rijen: ten minste 100 rijen met niet-NULL-vectorwaarden moeten aanwezig zijn in de tabel.
  • Foutgedrag: het maken van een vectorindex voor een tabel met minder dan 100 rijen mislukt met fout Msg 42266.

voorbeeldfout:

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.

Best practice: Vul de tabel met ten minste 100 rijen voordat u de vectorindex maakt. Voor ontwikkelings- en testscenario's waarbij minder rijen nodig zijn, VECTOR_SEARCH werkt zonder een index met behulp van een brute-force scanbenadering, hoewel de prestaties afnemen met grotere gegevenssets.

DML-ondersteuning

Zodra een DiskANN-vectorindex is gemaakt met de nieuwste versie, is de tabel niet langer alleen-lezen. U kunt gegevens vrijelijk wijzigen met behulp van DML-bewerkingen (Standard Data Manipulat Language) en wijzigingen worden automatisch doorgevoerd in vectorzoekresultaten.

Deze mogelijkheid maakt vectorzoekopdrachten geschikt voor live, transactionele werkbelastingen waarbij gegevens in de loop van de tijd veranderen.

Opmerkingen bij gedrag

  • Voor DML-bewerkingen is het niet nodig om de vectorindex te verwijderen of opnieuw te bouwen.
  • Wijzigingen zijn zichtbaar voor vectorzoekquery's na de transactiedoorvoeringen.
  • Voor grootschalige gegevensvervanging (bijvoorbeeld het verwijderen van de meeste rijen en het invoegen van een geheel nieuwe set insluitingen), kunt u overwegen om de vectorindex na de gegevensbelasting te verwijderen en opnieuw te maken om een optimale zoekkwaliteit te garanderen.

Opmerking

DML-ondersteuning is alleen beschikbaar met vectorindexen die zijn gemaakt met behulp van de nieuwste versie. Eerdere versies vereisen dat tabellen alleen-lezen zijn of de configuratie van het ALLOW_STALE_VECTOR_INDEX databasebereik gebruiken.

Bewakingsvectorindexonderhoud

Vectorindexen voeren achtergrondonderhoud uit om DML-wijzigingen op te nemen. Gebruik de sys.dm_db_vector_indexes dynamische beheerweergave om de status van de index- en onderhoudstaak te bewaken.

Vectorindexen combineren met traditionele indexen

Vectorindexen werken samen met traditionele B-tree-indexen om optimale queryprestaties te bieden. Overweeg bij het gebruik van iteratieve filters VECTOR_SEARCHtraditionele indexen te maken voor kolommen die worden gebruikt in filterpredicaten.

Zie Iteratief filtergedrag voor gedetailleerde informatie over iteratief filtergedrag en hoe deze verschilt van eerdere versies.

Aanbeveling

De queryoptimalisatie selecteert automatisch de beste uitvoeringsstrategie (dichtstbijzijnde buurindex versus kNN-zoekopdracht). Gebruik de FORCE_ANN_ONLY tabelhint om het gebruik van de dichtstbijzijnde buurindex af te dwingen. Zie Tabelhints voor vectorzoekopdrachten voor meer informatie.

Voorbeeldscenario:

-- 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);

Prestatievoordeel:

Bij het uitvoeren van query's met iteratieve filters gebruikt de SQL Server-queryoptimalisatie beide indextypen:

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;

In deze query:

  • De vectorindex identificeert vergelijkbare insluitingen op basis van de queryvector
  • De traditionele index op (category) filters kandidaten efficiënt tijdens het iteratieve zoekproces

Deze samengestelde strategie kan de queryprestaties aanzienlijk verbeteren vergeleken met het gebruik van alleen een vectorindex, met name wanneer filterpredicaten een hoge selectiviteit hebben.

Richtlijnen voor gegevenskwaliteit en onderhoud voor vectorindexen

Vermijd gegevenssets met hoge dubbele insluitingen

Vectorindexering werkt het beste wanneer insluitingen diverse semantische inhoud vertegenwoordigen. Gegevenssets met een groot deel van dubbele vectoren worden niet aanbevolen voor vectorindexering.

Hoge duplicatie kan leiden tot:

  • Slechte resultaatkwaliteit: dubbele vectoren verschijnen herhaaldelijk in resultaten, waardoor relevantere semantische overeenkomsten worden verdrongen.
  • Verminderde effectiviteit: dubbele insluitingen plaatsen betere buren, waardoor de bruikbaarheid van overeenkomsten zoeken wordt verlaagd.
  • Onnodig resourcegebruik: vectorindexen zijn duur om te bouwen en te onderhouden, en duplicaten voegen kosten toe zonder waarde toe te voegen.

Best practice: ontdubbeling van insluitingen voordat u een vectorindex maakt om zowel de prestaties als de resultaatkwaliteit te verbeteren.

Grootschalige scenario's voor gegevensvervanging

Vectorindexen ondersteunen invoegen, bijwerken en verwijderen. Wanneer de meeste of alle insluitingen echter worden vervangen( bijvoorbeeld het opnieuw insluiten van een gegevensset met een nieuw model), kan de bestaande index de nieuwe gegevensdistributie mogelijk niet meer weerspiegelen.

In grootschalige vervangingsscenario's:

  • Vectorzoekquery's blijven geldige resultaten retourneren
  • Maar de kwaliteit van relevante overeenkomsten en classificatie kan afnemen, omdat de indexstructuur is gebouwd voor een andere insluitingsdistributie.

Best practice: Wanneer u bijna volledige gegevensvervanging uitvoert (verwijderen en invoegen van nieuwe insluitingen), verwijdert u de vectorindex en maakt u deze opnieuw na het laden van de nieuwe gegevens. Het opnieuw maken van de index zorgt ervoor dat deze is geoptimaliseerd voor de nieuwe distributie van insluiten en herstelt voorspelbaar querygedrag.

Bekende problemen

Raadpleeg bekende problemen voor meer informatie.

Machtigingen

De gebruiker moet gemachtigd zijn ALTER voor de tabel.

Voorbeelden

Download en importeer het Wikipedia-artikel met voorbeeld van vector-insluitingen .

In voorbeelden wordt ervan uitgegaan dat er een tabel bestaat met wikipedia_articles een kolom title_vector van het type vector waarin de insluitingen van Wikipedia-artikelen van de titel worden opgeslagen. title_vector wordt ervan uitgegaan dat het een insluitingsmodel is dat wordt gegenereerd met een insluitmodel, zoals tekst-embedding-ada-002 of tekst-insluiten-3-klein, dat vectoren retourneert met 1536 dimensies.

Voor meer voorbeelden, waaronder end-to-end-oplossingen, gaat u naar de GitHub-opslagplaats Met voorbeelden van Azure SQL Database Vector Search.

Voorbeeld 1

In het volgende voorbeeld wordt een vectorindex voor de title_vector kolom gemaakt met behulp van de cosine metrische waarde.

CREATE VECTOR INDEX vec_idx
    ON [dbo].[wikipedia_articles] ([title_vector])
        WITH (METRIC = 'COSINE', TYPE = 'DISKANN');

Voorbeeld 2

In het volgende voorbeeld wordt een vectorindex voor de title_vector kolom gemaakt met behulp van de (negatieve) dot productmetrie, waardoor de parallelle uitvoering wordt beperkt tot 8 en de vector in de SECONDARY bestandsgroep wordt opgeslagen.

CREATE VECTOR INDEX vec_idx
    ON [dbo].[wikipedia_articles] ([title_vector])
        WITH (METRIC = 'DOT', TYPE = 'DISKANN', MAXDOP = 8)
    ON [SECONDARY];

Voorbeeld 3

Een eenvoudig end-to-end-voorbeeld met behulp van CREATE VECTOR INDEX en de gerelateerde VECTOR_SEARCH functie. De insluitingen worden gesimuleerd. In een praktijkscenario worden insluitingen gegenereerd met behulp van een insluitmodel en AI_GENERATE_EMBEDDINGS, of een externe bibliotheek zoals OpenAI SDK.

Opmerking

Voor de meest recente versievectorindexen zijn ten minste 100 rijen met gegevens vereist voordat de index wordt gemaakt. In dit voorbeeld worden 100 rijen ingevoegd om aan deze vereiste te voldoen. Zie Minimale gegevensvereisten voor meer informatie.

Het volgende codeblok laat zien CREATE VECTOR INDEX met gesimuleerde insluitingen:

  1. Hiermee schakelt u de preview-functie in (alleen vereist voor SQL Server 2025; niet nodig voor Azure SQL Database of SQL Database in Fabric).
  2. Maak een voorbeeldtabel dbo.Articles met een kolom embedding met gegevenstypevector (5).
  3. Voeg 100 rijen met voorbeeldgegevens in met gesimuleerde insluitingsgegevens.
  4. Maak een vectorindex op dbo.Articles.embedding.
  5. Demonstreert de vector-overeenkomstenzoekopdracht met de VECTOR_SEARCH functie.
-- 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;

De syntaxis voor het uitvoeren van query's is afhankelijk van de vectorindexversie:

Vectorindexversie Voorbeeld van syntaxis
Nieuwste versie SELECT TOP (N) WITH APPROXIMATE Zonder parameter gebruiken TOP_N
Eerdere versies (afgeschaft) Parameter in TOP_N functie gebruiken VECTOR_SEARCH

Voor eerdere versie-indexen (afgeschafte syntaxis):

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;

Voorbeeld 4: Werken met DML-bewerkingen

In de volgende voorbeelden ziet u DML-bewerkingen in een tabel met een vectorindex die is gemaakt met behulp van de nieuwste versie.

Rijen verwijderen

Als u rijen verwijdert, worden deze verwijderd uit zowel de zoekresultaten van de tabel als de vector.

DELETE FROM dbo.wikipedia_articles
WHERE id = 12345;

Nadat het verwijderen is voltooid, wordt de verwijderde rij niet meer weergegeven in vectorzoekquery's.

Nieuwe rijen invoegen

U kunt nieuwe rijen met insluitingen invoegen en ze worden onmiddellijk doorzoekbaar zonder de index opnieuw op te bouwen.

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)
);

Nieuw ingevoegde insluitingen worden automatisch opgenomen in de vectorindex en kunnen worden geretourneerd door volgende vectorzoekquery's.

Bestaande rijen bijwerken

Het bijwerken van vector- of niet-vectorkolommen wordt volledig ondersteund.

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;

Als een vectorkolom wordt bijgewerkt, wordt de index dienovereenkomstig bijgewerkt, zodat toekomstige vectorzoekopdrachten de nieuwe insluiting gebruiken.

SAMENVOEGEN gebruiken voor complexe bewerkingen

Met de MERGE instructie kunt u in één instructie invoeg-, update- en verwijderbewerkingen uitvoeren.

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;

De vectorindex wordt automatisch bijgewerkt om alle wijzigingen weer te geven die door de MERGE instructie zijn aangebracht.