Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : SQL Server 2025 (17.x)
Azure SQL Database
SQL database in Microsoft Fabric
Créez un index approximatif sur une colonne vectorielle pour améliorer les performances de la recherche des voisins les plus proches. Pour en savoir plus sur le fonctionnement de l’indexation vectorielle et de la recherche vectorielle et les différences entre la recherche exacte et approximative, reportez-vous à la recherche vectorielle et aux index vectoriels dans le moteur de base de données SQL.
Base de données Azure SQL et base de données SQL dans Fabric
La fonctionnalité est en aperçu. Veillez à consulter les limitations actuelles avant de l’utiliser.
Remarque
En tant que fonctionnalité en préversion, la technologie présentée dans cet article est soumise aux conditions d’utilisation supplémentaires des préversions de Microsoft Azure.
Fonctionnalité d’aperçu de SQL Server 2025
Dans SQL Server 2025, cette fonction est en aperçu et peut être modifiée. Pour utiliser cette fonctionnalité, vous devez activer la PREVIEW_FEATURES la base de données.
Veillez à consulter les limitations actuelles avant de l’utiliser.
Syntaxe
Conventions de la syntaxe Transact-SQL
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" } ]
[;]
Les arguments
index_name
Nom de l’index. Les noms d’index doivent être uniques dans une table, mais ne doivent pas être uniques dans une base de données. Les noms d’index doivent suivre les règles des identificateurs.
objet
Table sur laquelle l’index est créé. Il doit s’agir d’une table de base. Les vues, les tables temporaires, locales et globales, ne sont pas prises en charge.
vector_column
Colonne à utiliser pour créer l’index vectoriel. Il doit être de type vecteur .
MÉTRIQUE
Chaîne portant le nom de la métrique de distance à utiliser pour calculer la distance entre les deux vecteurs donnés. Les métriques de distance suivantes sont prises en charge :
-
cosine- Distance cosinus -
euclidean- Distance euclide -
dot- (Négatif) Produit point
TYPE
Type d’algorithme ANN utilisé pour générer l’index. Seule DiskANN est actuellement prise en charge. DiskANN est la valeur par défaut.
MAXDOP
Remplace l’option de configuration max degree of parallelism pour l’opération d’index. Pour plus d’informations, consultez Configuration du serveur : degré maximal de parallélisme. Permet MAXDOP de limiter le degré de parallélisme et la consommation de ressources résultante pour une opération de génération d’index.
max_degree_of_parallelism peut avoir la valeur :
1Supprime la création de plans parallèles.
>1
Limite le degré maximal de parallélisme utilisé dans une opération d’index parallèle au nombre spécifié ou inférieur en fonction de la charge de travail système actuelle.
0(valeur par défaut)Utilise le degré de parallélisme spécifié au niveau du serveur, de la base de données ou du groupe de charge de travail, sauf s’il est réduit en fonction de la charge de travail système actuelle.
Pour plus d’informations, consultez Configurer des opérations d’index parallèles.
Remarque
Les opérations d’index parallèles ne sont pas disponibles dans toutes les éditions de SQL Server. Pour une liste des fonctionnalités prises en charge par les éditions de SQL Server, voir Éditions et fonctionnalités prises en charge de SQL Server 2022 ou Éditions et fonctionnalités prises en charge par SQL Server 2025.
Limites
La préversion actuelle présente les limitations suivantes :
L’index vectoriel ne peut pas être partitionné. Aucune prise en charge de partition.
La table doit avoir une seule colonne, entier, index cluster de clé primaire.
Les index vectoriels ne sont pas répliqués sur les abonnés.
Une table avec un index vectoriel devient en lecture seule. Aucune modification de données n’est autorisée pendant que l’index vectoriel est présent sur la table.
Dans Azure SQL Database et SQL Database dans Microsoft Fabric, vous pouvez définir la
ALLOW_STALE_VECTOR_INDEXconfiguration portée de la base de données àON, ce qui permet à nouveau de réécrire la table.Remarque
L’option
ALLOW_STALE_VECTOR_INDEXde configuration par portée de base de données n’est actuellement pas disponible dans SQL Server 2025 (17.x).L’index vectoriel n’est pas mis à jour lorsque de nouvelles données sont insérées ou mises à jour dans la table. Pour rafraîchir l’index vectoriel, il faut le déposer et le recréer.
Problèmes connus
Pour plus d’informations, consultez les problèmes connus.
Autorisations
L’utilisateur doit disposer ALTER d’une autorisation sur la table.
Exemples
Vous trouverez les détails de la base de données utilisée dans l’exemple : téléchargez et importez l’article Wikipédia avec des incorporations vectorielles.
Les exemples supposent l’existence d’une table nommée wikipedia_articles avec une colonne title_vector de type vector qui stocke les incorporations de titres d’articles Wikipédia.
title_vector est supposé être un incorporation généré avec un modèle d’incorporation tel que l’incorporation de texte-ada-002 ou l’incorporation de texte-3-small, qui retourne des vecteurs avec 1 536 dimensions.
Pour obtenir d’autres exemples, notamment des solutions de bout en bout, accédez au dépôt GitHub d’exemples de recherche vectorielle Azure SQL Database.
Exemple 1
L’exemple suivant crée un index vectoriel sur la colonne à l’aide title_vector de la cosine métrique.
CREATE VECTOR INDEX vec_idx
ON [dbo].[wikipedia_articles] ([title_vector])
WITH (METRIC = 'COSINE', TYPE = 'DISKANN');
Exemple 2
L’exemple suivant crée un index vectoriel sur la title_vector colonne à l’aide de la métrique de produit (négative), dot limitant le parallélisme à 8 et stockant le vecteur dans le SECONDARY groupe de fichiers.
CREATE VECTOR INDEX vec_idx
ON [dbo].[wikipedia_articles] ([title_vector])
WITH (METRIC = 'DOT', TYPE = 'DISKANN', MAXDOP = 8)
ON [SECONDARY];
Exemple 3
Exemple de base de bout en bout utilisant CREATE VECTOR INDEX et de la fonction associée VECTOR_SEARCH . Les incorporations sont simulées. Dans un scénario réel, les incorporations sont générées à l’aide d’un modèle d’incorporation et de AI_GENERATE_EMBEDDINGS, ou d’une bibliothèque externe telle qu’OpenAI SDK.
Le bloc de code suivant crée des incorporations fictives avec les étapes suivantes :
- Active l’indicateur de trace, nécessaire dans la préversion actuelle.
- Créez un exemple de table
dbo.Articlesavec une colonneembeddingavec un vecteur de type de données (5). - Insérez des exemples de données avec des données d’incorporation simulées.
- Créez un index vectoriel sur
dbo.Articles.embedding. - Illustrez la recherche de similarité vectorielle avec la
VECTOR_SEARCH()fonction.
-- 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;