Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: SQL Server 2025 (17.x)
Base de datos SQL de Azure SQL Database
deAzure SQL Managed Instance
en Microsoft Fabric
El motor de base de datos SQL proporciona la capacidad de almacenar cualquier tipo de datos y ejecutar cualquier tipo de consulta: estructurado y no estructurado, y para realizar búsquedas vectoriales en esos datos. Es una buena opción para escenarios en los que necesita buscar en todos estos datos juntos y no quiere usar un servicio independiente para la búsqueda que complicaría la arquitectura.
Nota:
- Las características de vector están disponibles en Instancia administrada de Azure SQL configuradas con la directiva de actualización de sql Server 2025 o Always-up-to-date.
Vectors
Los vectores son matrices ordenadas de números (normalmente floats) que pueden representar información sobre algunos datos. Por ejemplo, una imagen se puede representar como un vector de valores de píxeles o una cadena de texto se puede representar como un vector de valores ASCII. El proceso para convertir los datos en un vector se denomina vectorización. El tipo de datos vectorial en SQL Server está diseñado para almacenar estas matrices de números de forma eficaz.
Incrustaciones
Las incrustaciones son vectores que representan características importantes de los datos. Las incrustaciones a menudo se aprenden mediante un modelo de aprendizaje profundo, y los modelos de aprendizaje automático e inteligencia artificial las usan como características. Las incrustaciones también pueden capturar la similitud semántica entre conceptos similares. Por ejemplo, al generar una incrustación para las palabras person y human, podemos esperar que sus incrustaciones (representaciones vectoriales) tengan valores similares, ya que las palabras son semánticamente similares.
Azure OpenAI ofrece modelos para crear incrustaciones a partir de datos de texto. El servicio divide el texto en tokens y genera incrustaciones mediante modelos entrenados previamente por OpenAI. Para obtener más información, consulte Creación de incrustaciones con Azure OpenAI.
Una vez generadas las incrustaciones, se pueden almacenar en una base de datos de SQL Server. Esto le permite almacenar las incrustaciones junto con los datos que representan y realizar consultas de búsqueda vectorial para buscar puntos de datos similares.
Búsqueda de vectores
La búsqueda de vectores hace referencia al proceso de búsqueda de todos los vectores de un conjunto de datos similar a un vector de consulta específico. Por lo tanto, un vector de consulta para la palabra human busca en todo el conjunto de datos vectores similares y, por tanto, palabras similares: en este ejemplo debe encontrar la palabra person como una coincidencia cercana. Esta proximidad, o distancia, se mide mediante una métrica de distancia, como la distancia coseno. Cuanto más cercanos sean los vectores, más similares serán.
SQL Server proporciona compatibilidad integrada con vectores a través del tipo de datos vectorial. Los vectores se almacenan en un formato binario optimizado, pero se exponen como matrices JSON para mayor comodidad. Cada elemento del vector se almacena mediante el valor de punto flotante de precisión única (4 bytes). Junto con el tipo de datos hay funciones dedicadas para operar en vectores. Por ejemplo, es posible encontrar la distancia entre dos vectores mediante la función VECTOR_DISTANCE . La función devuelve un valor escalar con la distancia entre dos vectores en función de la métrica de distancia que especifique.
Dado que normalmente los vectores se administran como matrices de floats, la creación de un vector se puede hacer simplemente convertir una matriz JSON a un tipo de datos vectorial . Por ejemplo, el código siguiente crea un vector a partir de una matriz JSON:
SELECT
CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS v1,
CAST(JSON_ARRAY(1.0, -0.2, 30) AS VECTOR(3)) AS v2;
O bien, use la conversión implícita
DECLARE @v1 VECTOR(3) = '[1.0, -0.2, 30]';
DECLARE @v2 VECTOR(3) = JSON_ARRAY(1.0, -0.2, 30);
SELECT @v1 as v1, @v2 as v2;
Lo mismo sucede para convertir un vector en una matriz JSON:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT
CAST(@v AS NVARCHAR(MAX)) AS s,
CAST(@v AS JSON) AS j
Búsqueda exacta y distancia vectorial (vecinos más cercanos exactos)
La búsqueda exacta, también conocida como búsqueda de vecino más cercano (k-NN), implica calcular la distancia entre un vector determinado y todos los demás vectores de un conjunto de datos, ordenar los resultados y seleccionar los vecinos más cercanos en función de una métrica de distancia especificada. Este método garantiza una recuperación precisa de los vecinos más cercanos, pero puede ser de uso intensivo de cálculo, especialmente para grandes conjuntos de datos.
Las funciones de distancia vectorial se usan para medir la proximidad entre vectores. Entre las métricas de distancia comunes se incluyen la distancia euclidiana, la similitud de coseno y el producto de puntos. Estas funciones son esenciales para realizar búsquedas k-NN y garantizar resultados precisos.
La búsqueda de vectores de vecinos más cercanos exacta (Exact Nearest Neighbor, ENN) realiza un cálculo exhaustivo de distancia en todos los vectores indexados para garantizar la recuperación de los vecinos más cercanos según una métrica de distancia especificada. Este método es preciso, pero con un uso intensivo de recursos, lo que resulta adecuado para conjuntos de datos o escenarios más pequeños en los que la precisión es fundamental.
En el motor de base de datos sql, las búsquedas k-NN se pueden realizar mediante la función VECTOR_DISTANCE , lo que permite un cálculo eficaz de distancias entre vectores y facilita la recuperación de los vecinos más cercanos.
En el ejemplo siguiente se muestra cómo realizar k-NN para devolver los 10 vectores más similares principales almacenados en la content_vector tabla al vector @qvde consulta especificado.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT TOP (10) id, VECTOR_DISTANCE('cosine', @qv, [content_vector]) AS distance, title
FROM [dbo].[wikipedia_articles_embeddings]
ORDER BY distance
Se recomienda usar una búsqueda exacta cuando no hay muchos vectores en los que buscar (menos de 50 000 vectores como recomendación general). La tabla puede contener muchos más vectores siempre que los predicados de búsqueda reduzcan el número de vectores que se usarán para la búsqueda vecina a 50 000 o menos.
Índice de vector aproximado y búsqueda de vectores (vecinos más cercanos aproximados)
Nota:
El índice vectorial aproximado y la búsqueda vectorial están en vista previa y actualmente solo están disponibles en SQL Server 2025 (17.x), Azure SQL Database y SQL database en Microsoft Fabric.
La identificación de todos los vectores cerca de un vector de consulta determinado requiere recursos sustanciales para calcular la distancia entre el vector de consulta y los vectores almacenados en la tabla. La búsqueda de todos los vectores cerca de un vector de consulta determinado implica un examen completo de la tabla y un uso significativo de la CPU. Esto se denomina una consulta de "K-vecinos más cercanos" o "k-NN" y devuelve los "k" vectores más cercanos.
Los vectores se usan para buscar datos similares para los modelos de inteligencia artificial para responder a las consultas de usuario. Esto implica consultar la base de datos para los vectores "k" más próximos al vector de consulta utilizando métricas de distancia como el producto de punto (interior), la similitud de coseno o la distancia euclidiana.
Las consultas de K-NN suelen tener problemas de escalabilidad, lo que hace aceptable, en muchos casos, sacrificar cierta precisión, especialmente el recall, para obtener mejoras significativas en velocidad. Este método se conoce como vecinos más cercanos aproximados (ANN).
La recuperación es un concepto importante con el que deben familiarizarse todos aquellos usuarios que usen o planeen usar vectores e incrustaciones. De hecho, la recuperación mide la proporción de vecinos más próximos aproximados que el algoritmo identifica, en comparación con los vecinos más próximos exactos que una búsqueda exhaustiva devolvería. Por lo tanto, es una buena medida de la calidad de la aproximación que está haciendo el algoritmo. Una recuperación perfecta, que equivale a no usar ninguna aproximación, es 1.
En el caso de las aplicaciones de inteligencia artificial, el equilibrio es bastante razonable. Dado que las incrustaciones de vectores ya son conceptos de aproximación, el uso de una red neuronal artificial (ANN) no afecta de manera significativa a los resultados, siempre y cuando la tasa de recuperación sea cercana a 1. Esto garantiza que los resultados devueltos sean muy similares a los de k-NN, al tiempo que ofrece un rendimiento muy mejorado y un uso de recursos considerablemente reducido, lo que es muy beneficioso para las bases de datos operativas.
Es importante comprender que el término "índice" cuando se usa al hacer referencia a un índice vectorial tiene un significado diferente al índice con el que se usa para trabajar en bases de datos relacionales. De hecho, un índice vectorial devuelve resultados aproximados.
En el motor de SQL Database, los índices vectoriales se basan en el algoritmo DiskANN . DiskANN se basa en la creación de un grafo para navegar rápidamente por todos los vectores indexados para encontrar la coincidencia más cercana a un vector determinado. DiskANN es un sistema basado en grafos para indexar y buscar grandes conjuntos de datos vectoriales mediante recursos computacionales limitados. Usa de forma eficaz SSDs y memoria mínima para manejar significativamente más datos que los índices en memoria, a la vez que mantiene altas tasas de consultas por segundo (QPS) y baja latencia, y garantiza un equilibrio entre el uso de memoria, CPU y entrada/salida y el rendimiento de la búsqueda.
En primer lugar, se puede realizar una búsqueda de algoritmos de vecinos más cercanos aproximada mediante el comando CREATE VECTOR INDEX T-SQL y, a continuación, usar la función T-SQL VECTOR_SEARCH para ejecutar la búsqueda aproximada.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT
t.id, s.distance, t.title
FROM
VECTOR_SEARCH(
TABLE = [dbo].[wikipedia_articles_embeddings] AS t,
COLUMN = [content_vector],
SIMILAR_TO = @qv,
METRIC = 'cosine',
TOP_N = 10
) AS s
ORDER BY s.distance