Freigeben über


VEKTORINDEX ERSTELLEN (Transact-SQL) (Vorschau)

Gilt für: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

Erstellen Sie einen ungefähren Index für eine Vektorspalte, um die Leistung der nächsten Nachbarnsuche zu verbessern. Weitere Informationen zur Funktionsweise der Vektorindizierung und Vektorsuche sowie der Unterschiede zwischen exakter und ungefährer Suche finden Sie unter Vektorsuche und Vektorindizes im SQL-Datenbankmodul.

Azure SQL-Datenbank und SQL-Datenbank in Fabric

Die Funktion ist noch in der Vorschau. Überprüfen Sie die aktuellen Einschränkungen , bevor Sie sie verwenden.

Hinweis

Als Previewfunktion unterliegt die in diesem Artikel vorgestellte Technologie den zusätzlichen Nutzungsbedingungen für Microsoft Azure-Vorschauen.

SQL Server 2025 Vorschaufunktion

In SQL Server 2025 befindet sich diese Funktion in der Vorschau und kann sich ändern. Um dieses Feature verwenden zu können, müssen Sie die PREVIEW_FEATURESDatenbankbereichskonfiguration aktivieren.

Überprüfen Sie die aktuellen Einschränkungen , bevor Sie sie verwenden.

Syntax

Transact-SQL-Syntaxkonventionen

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

Argumente

index_name

Der Name des Index. Indexnamen müssen innerhalb einer Tabelle eindeutig sein, müssen aber nicht innerhalb einer Datenbank eindeutig sein. Indexnamen müssen den Regeln von Bezeichnern entsprechen.

Objekt-

Tabelle, auf der der Index erstellt wird. Es muss sich um eine Basistabelle sein. Ansichten, temporäre Tabellen, sowohl lokal als auch global, werden nicht unterstützt.

vector_column

Spalte, die zum Erstellen des Vektorindex verwendet werden soll. Er muss vom Vektortyp sein.

METRIK

Eine Zeichenfolge mit dem Namen der Entfernungsmetrik, die zum Berechnen des Abstands zwischen den beiden angegebenen Vektoren verwendet werden soll. Die folgenden Entfernungsmetriken werden unterstützt:

  • cosine - Kosinusabstand
  • euclidean - Euklidischer Abstand
  • dot - (Negativ) Punktprodukt

TYPE

Der Typ des ANN-Algorithmus , der zum Erstellen des Indexes verwendet wird. Derzeit wird nur DiskANN unterstützt. DiskANN ist der Standardwert.

MAXDOP

Überschreibt den maximalen Grad an Parallelität Konfigurationsoption für den Indexvorgang. Weitere Informationen finden Sie unter Serverkonfiguration: max. Grad der Parallelität. Verwenden Sie MAXDOP, um den Grad der Parallelität und den resultierenden Ressourcenverbrauch für einen Indexbuildvorgang zu begrenzen.

max_degree_of_parallelism kann folgende Werte haben:

  • 1

    Unterdrückt das Generieren paralleler Pläne.

  • >1

    Schränkt den maximalen Grad der Parallelität ein, der in einem parallelen Indexvorgang auf die angegebene Zahl oder weniger basierend auf der aktuellen Systemauslastung verwendet wird.

  • 0 (Standardwert)

    Verwendet den Grad der Parallelität, die auf Server-, Datenbank- oder Workloadgruppenebene angegeben ist, es sei denn, dies ist auf der Grundlage der aktuellen Systemauslastung reduziert.

Weitere Informationen finden Sie unter Konfigurieren von parallelen Indexvorgängen.

Hinweis

Parallele Indexvorgänge sind nicht in jeder Edition von SQL Server verfügbar. Eine Liste der Funktionen, die von den Editionen von SQL Server unterstützt werden, finden Sie unter Editions und unterstützte Funktionen von SQL Server 2022 oder Editions sowie unterstützte Funktionen von SQL Server 2025.

Einschränkungen

Die aktuelle Vorschau hat die folgenden Einschränkungen:

  • Der Vektorindex kann nicht partitioniert werden. Keine Partitionsunterstützung.

  • Die Tabelle muss über eine einzelne Spalte, eine ganze Zahl, einen Primärschlüssel (gruppierter Index) verfügen.

  • Vektorindizes werden nicht für Abonnenten repliziert.

  • Eine Tabelle mit einem Vektorindex wird schreibgeschützt. Es ist keine Datenänderung zulässig, während der Vektorindex in der Tabelle vorhanden ist.

    In Azure SQL Database und SQL Database in Microsoft Fabric kann man die ALLOW_STALE_VECTOR_INDEXDatenbank-Scoped Konfiguration auf ONsetzen, was die Tabelle wieder beschreibbar macht.

    Hinweis

    Die ALLOW_STALE_VECTOR_INDEX Datenbank-Scoped-Konfigurationsoption ist derzeit in SQL Server 2025 (17.x) nicht verfügbar.

    Der Vektorindex wird nicht aktualisiert, wenn neue Daten eingefügt oder in die Tabelle aktualisiert werden. Um den Vektorindex zu aktualisieren, müssen Sie ihn entfernen und neu erstellen.

Bekannte Probleme

Weitere Informationen hierzu können Sie unter " Bekannte Probleme" überprüfen.

Erlaubnisse

Der Benutzer muss über die Berechtigung für die Tabelle verfügen ALTER .

Beispiele

Details zur im Beispiel verwendeten Datenbank finden Sie hier: Laden Sie den Wikipedia-Artikel mit Vector Embeddings herunter und importieren Sie sie.

Beispiele gehen davon aus, dass eine Mit einer Spalte wikipedia_articles vom Typ title_vector benannte vector Tabelle vorhanden ist, in der die Einbettungen von Wikipedia-Artikeln des Titels gespeichert werden. title_vector wird angenommen, dass es sich um eine einbettung handelt, die mit einem Einbettungsmodell wie text-embedding-ada-002 oder text-embedding-3-small generiert wird, das Vektoren mit 1.536 Dimensionen zurückgibt.

Weitere Beispiele, einschließlich End-to-End-Lösungen, finden Sie im GitHub-Repository für Azure SQL-Datenbankvektorsuchbeispiele.

Beispiel 1

Im folgenden Beispiel wird mithilfe der title_vector Metrik ein Vektorindex für die cosine Spalte erstellt.

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

Beispiel 2

Im folgenden Beispiel wird ein Vektorindex für die title_vector Spalte mit der (negativen) dot Produktmetrik erstellt, wobei die Parallelität auf 8 beschränkt und der Vektor in der SECONDARY Dateigruppe gespeichert wird.

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

Beispiel 3

Ein einfaches End-to-End-Beispiel mit CREATE VECTOR INDEX und der zugehörigen VECTOR_SEARCH Funktion. Die Einbettungen werden simuliert. In einem realen Szenario werden Einbettungen mithilfe eines Einbettungsmodells und AI_GENERATE_EMBEDDINGS oder einer externen Bibliothek wie dem OpenAI SDK generiert.

Der folgende Codeblock erstellt simulierte Einbettungen mit den folgenden Schritten:

  1. Aktiviert die Ablaufverfolgungskennzeichnung, die in der aktuellen Vorschau erforderlich ist.
  2. Erstellen Sie eine Beispieltabelle dbo.Articles mit einer Spalte embedding mit Datentypvektor(5).
  3. Fügen Sie Beispieldaten mit simulierten Einbettungsdaten ein.
  4. Erstellen Sie einen Vektorindex für dbo.Articles.embedding.
  5. Veranschaulichen Sie die Vektor-Ähnlichkeitssuche mit der VECTOR_SEARCH() Funktion.
-- 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;