Delen via


CREATE VECTOR INDEX (Transact-SQL)

Van toepassing op: SQL Server 2025 (17.x) Preview

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.

Previewfunctie

Deze functie is in preview en kan 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.

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. Zie Edities en ondersteunde functies van SQL Server 2022 of Edities en ondersteunde functies van SQL Server 2022 en ondersteunde functies van SQL Server 2025 Preview voor een lijst met functies die worden ondersteund door de edities van SQL Server.

Beperkingen

De huidige preview heeft de volgende beperkingen:

  • Vectorindex kan niet worden gepartitioneerd. Geen partitieondersteuning.
  • De tabel moet één kolom, geheel getal, geclusterde primaire sleutelindex hebben.
  • Een tabel met een vectorindex wordt alleen-lezen. Er is geen gegevenswijziging toegestaan terwijl de vectorindex aanwezig is in de tabel.
  • Vectorindexen worden niet gerepliceerd naar abonnees.

Bekende problemen

Wanneer u momenteel een vectorindex voor sommige gegevenssets maakt, kan dit de volgende fouten retourneren:

  • Fout 9829: STRING_AGG aggregation result exceeded the limit of 8000 bytes. Use LOB types to avoid result truncation.
  • 42234: Internal SQL error during DiskANN graph build

Raadpleeg bekende problemen voor meer informatie.

Machtigingen

De gebruiker moet gemachtigd zijn ALTER voor de tabel.

Voorbeelden

Details van de database die in het voorbeeld wordt gebruikt, vindt u hier: Download en importeer het Wikipedia-artikel met Vector Embeddings.

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.

In het volgende codeblok worden gesimuleerde insluitingen gemaakt met de volgende stappen:

  1. Hiermee schakelt u de traceringsvlag in die nodig is in de huidige preview.
  2. Maak een voorbeeldtabel dbo.Articles met een kolom embedding met gegevenstypevector (5).
  3. Voeg 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
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
);

-- Step 2: Insert sample data
INSERT INTO Articles (id, title, content, embedding)
VALUES
(1, 'Intro to AI', 'This article introduces AI concepts.', '[0.1, 0.2, 0.3, 0.4, 0.5]'),
(2, 'Deep Learning', 'Deep learning is a subset of ML.', '[0.2, 0.1, 0.4, 0.3, 0.6]'),
(3, 'Neural Networks', 'Neural networks are powerful models.', '[0.3, 0.3, 0.2, 0.5, 0.1]'),
(4, 'Machine Learning Basics', 'ML basics for beginners.', '[0.4, 0.5, 0.1, 0.2, 0.3]'),
(5, 'Advanced AI', 'Exploring advanced AI techniques.', '[0.5, 0.4, 0.6, 0.1, 0.2]');

-- Step 3: Create a vector index on the embedding column
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (metric = 'cosine', type = 'diskann');

-- Step 4: Perform a vector similarity search
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT
    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;