Compartir por


CREAR ÍNDICE VECTORIAL (Transact-SQL) (Vista previa)

Aplica a: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

Cree un índice aproximado en una columna vectorial para mejorar el rendimiento de la búsqueda de vecinos más cercanos. Para obtener más información sobre cómo funciona la indexación de vectores y la búsqueda de vectores, y las diferencias entre la búsqueda exacta y aproximada, consulte Búsqueda de vectores e índices de vectores en el motor de base de datos SQL.

Azure SQL Database y SQL Database en Fabric

La función está en vista previa. Asegúrese de consultar las limitaciones actuales antes de usarlas.

Nota:

Como característica en versión preliminar, la tecnología que se presenta en este artículo está sujeta a los términos de uso complementarios para las versiones preliminares de Microsoft Azure.

Función de Vista previa de SQL Server 2025

En SQL Server 2025 esta función está en vista previa y está sujeta a cambios. Para poder usar esta característica, debe habilitar la PREVIEW_FEATURESconfiguración con ámbito de base de datos.

Asegúrese de consultar las limitaciones actuales antes de usarlas.

Sintaxis

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

Argumentos

index_name

El nombre del índice. Los nombres de índice deben ser únicos dentro de una tabla, pero no tienen que ser únicos dentro de una base de datos. Los nombres de índice deben seguir las reglas de identificadores.

de objeto

Tabla en la que se crea el índice. Debe ser una tabla base. No se admiten vistas, tablas temporales, tanto locales como globales.

vector_column

Columna que se va a usar para crear el índice vectorial. Debe ser de tipo vector .

MÉTRICO

Cadena con el nombre de la métrica de distancia que se va a usar para calcular la distancia entre los dos vectores especificados. Se admiten las siguientes métricas de distancia:

  • cosine - Distancia de coseno
  • euclidean - Distancia euclidiana
  • dot - (Negativo) Producto de puntos

TYPE

Tipo de algoritmo ANN usado para compilar el índice. Actualmente solo se admite DiskANN. DiskANN es el valor predeterminado.

MAXDOP

Invalida la grado máximo de paralelismo opción de configuración para la operación de índice. Para obtener más información, vea Configuración del servidor: grado máximo de paralelismo. Use MAXDOP para limitar el grado de paralelismo y el consumo de recursos resultante para una operación de compilación de índice.

max_degree_of_parallelism puede tener estos valores:

  • 1

    Suprime la generación de planes paralelos.

  • >1

    Restringe el grado máximo de paralelismo usado en una operación de índice paralelo al número especificado o menos en función de la carga de trabajo del sistema actual.

  • 0 (valor predeterminado)

    Usa el grado de paralelismo especificado en el nivel de servidor, base de datos o grupo de cargas de trabajo, a menos que se reduzca en función de la carga de trabajo del sistema actual.

Para obtener más información, consulte Configuración de operaciones de índice en paralelo.

Nota:

Las operaciones de índices en paralelo no están disponibles en todas las ediciones de SQL Server. Para una lista de funciones soportadas por las ediciones de SQL Server, consulte Ediciones y características soportadas de SQL Server 2022 o Ediciones y características soportadas de SQL Server 2025.

Limitaciones

La versión preliminar actual tiene las siguientes limitaciones:

  • El índice vectorial no se puede particionar. No se admite ninguna partición.

  • La tabla debe tener una sola columna, entero, índice agrupado de clave principal.

  • Los índices vectoriales no se replican en los suscriptores.

  • Una tabla con un índice vectorial se convierte en de solo lectura. No se permite ninguna modificación de datos mientras el índice vectorial está presente en la tabla.

    En Azure SQL Database y SQL Database en Microsoft Fabric, puedes establecer la ALLOW_STALE_VECTOR_INDEXconfiguración con alcance de base de datos en ON, lo que permite que la tabla vuelva a ser escriturable.

    Nota:

    La ALLOW_STALE_VECTOR_INDEX opción de configuración con alcance de base de datos no está disponible actualmente en SQL Server 2025 (17.x).

    El índice vectorial no se actualiza cuando se insertan o actualizan nuevos datos en la tabla. Para actualizar el índice vectorial, debes dejarlo caer y recrearlo.

Problemas conocidos

Para obtener más información, consulte Problemas conocidos.

Permisos

El usuario debe tener ALTER permiso en la tabla.

Ejemplos

Los detalles de la base de datos usada en el ejemplo se pueden encontrar aquí: Descargar e importar el artículo de Wikipedia con incrustaciones de vectores.

En los ejemplos se supone que existe una tabla denominada wikipedia_articles con una columna title_vector de tipo vector que almacena las inserciones de título de los artículos de Wikipedia. title_vector se supone que es una inserción generada con un modelo de inserción como text-embeding-ada-002 o text-embeding-3-small, que devuelve vectores con 1536 dimensiones.

Para obtener más ejemplos, incluidas las soluciones de un extremo a otro, vaya al repositorio de GitHub Ejemplos de búsqueda de vectores de Azure SQL Database.

Ejemplo 1

En el ejemplo siguiente se crea un índice vectorial en la title_vector columna mediante la cosine métrica .

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

Ejemplo 2

En el ejemplo siguiente se crea un índice vectorial en la title_vector columna mediante la métrica del producto (negativo), dot lo que limita el paralelismo a 8 y almacena el vector en el SECONDARY grupo de archivos.

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

Ejemplo 3

Ejemplo básico de un extremo a otro mediante CREATE VECTOR INDEX y la función relacionada VECTOR_SEARCH . Las incrustaciones se simulan. En un escenario real, las incrustaciones se generan mediante un modelo de inserción y AI_GENERATE_EMBEDDINGS, o una biblioteca externa como sdk de OpenAI.

El siguiente bloque de código crea incrustaciones simuladas con los pasos siguientes:

  1. Habilita la marca de seguimiento, necesaria en la versión preliminar actual.
  2. Cree una tabla dbo.Articles de ejemplo con una columna embedding con vector de tipo de datos(5).
  3. Inserte datos de ejemplo con datos ficticios de inserción.
  4. Cree un índice de vector en dbo.Articles.embedding.
  5. Muestra la búsqueda de similitud vectorial con la VECTOR_SEARCH() función .
-- 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;