적용 대상: SQL Server 2025 (17.x)
Azure SQL Database
SQL 데이터베이스 in Microsoft Fabric
근사한 인접 벡터 검색 알고리즘을 사용하여 지정된 쿼리 벡터와 유사한 벡터를 검색합니다. 벡터 인덱싱 및 벡터 검색의 작동 방식과 정확한 검색과 근사 검색 간의 차이점에 대한 자세한 내용은 SQL Database 엔진의 벡터 검색 및 벡터 인덱스를 참조하세요.
Azure SQL Database 및 Fabric의 SQL 데이터베이스
이 기능은 미리보기 중입니다. 사용하기 전에 현재 제한 사항을 확인해야 합니다.
비고
미리 보기 기능으로, 이 문서에 제시된 기술에는 Microsoft Azure 미리 보기에 대한 보충 사용 약관이 적용됩니다.
SQL Server 2025 프리뷰 기능
SQL Server 2025에서는 이 기능이 미리보기 단계이며 변경될 수 있습니다. 이 기능을 사용하려면 PREVIEW_FEATURES을 사용하도록 설정해야 합니다.
사용하기 전에 현재 제한 사항을 확인해야 합니다.
Syntax
VECTOR_SEARCH(
TABLE = object [ AS source_table_alias ]
, COLUMN = vector_column
, SIMILAR_TO = query_vector
, METRIC = { 'cosine' | 'dot' | 'euclidean' }
, TOP_N = k
) [ AS result_table_alias ]
Arguments
TABLE = 개체 [AS source_table_alias]
검색을 수행하는 테이블입니다. 기본 테이블이어야 합니다. 로컬 테이블과 전역 모두의 임시 테이블은 지원되지 않습니다.
열(COLUMN) = vector_column
검색이 수행되는 벡터 열입니다. 열은 벡터 데이터 형식이어야 합니다.
SIMILAR_TO = query_vector
검색에 사용되는 벡터입니다. 변수 또는 벡터 형식의 열이어야 합니다.
메트릭 = { '코사인' | '닷' | '유클리드' }
쿼리 벡터와 지정된 열의 벡터 사이의 거리를 계산하는 데 사용되는 거리 메트릭입니다. ANN(근사 근사 항목) 인덱스는 동일한 메트릭과 동일한 열에 일치하는 ANN 인덱스가 있는 경우에만 사용됩니다. 호환되는 ANN 인덱스가 없으면 경고가 발생하고 KNN(k-Nearest Neighbor) 알고리즘이 사용됩니다.
TOP_N = <k>
반환해야 하는 유사한 벡터의 최대 수입니다. 양의 정수여야 합니다.
result_table_alias
별칭은 결과 집합을 참조하는 데 사용됩니다.
결과 집합 반환
함수에서 반환된 결과 집합에는 다음이 VECTOR_SEARCH 포함됩니다.
인수에 지정된 테이블의 모든 열입니다
TABLE.인수로 지정된 열의 벡터와 인수에 제공
distance된COLUMN벡터 사이의 거리를 나타내는 추가SIMILAR_TO열입니다.
거리 열은 함수 자체에 VECTOR_SEARCH 의해 생성되지만 다른 모든 열은 인수에서 TABLE 참조되는 테이블에서 가져옵니다.
인수에서 TABLE 테이블의 별칭을 사용하는 경우 동일한 별칭을 사용하여 문에서 SELECT 해당 열을 참조해야 합니다. 에 지정된 테이블의 열을 참조하기 위해 VECTOR_SEARCH 할당된 TABLE별칭을 사용할 수 없습니다. 이 동작은 출력 VECTOR_SEARCH 을 가져와서 테이블 데이터와 병합하여 빌드된 결과 집합을 생각하면 이해하기 쉽습니다.
인수에 TABLE 지정된 테이블에 이미 이름이 지정된 distance열이 있는 경우 동작은 열 이름을 공유하는 두 테이블 간의 SQL 조인과 유사합니다. 이러한 경우 테이블 별칭을 사용하여 열 참조를 명확히 해야 합니다. 그렇지 않으면 오류가 발생합니다.
Limitations
현재 미리 보기에는 다음과 같은 제한 사항이 있습니다.
필터 후만
조건자를 적용하기 전에 벡터 검색이 발생합니다. 추가 조건자는 가장 유사한 벡터가 반환된 후에만 적용됩니다. 다음 샘플에서는 쿼리 벡터 @qv와 가장 유사한 포함이 있는 상위 10개 행을 반환한 다음 절에 WHERE 지정된 조건자를 적용합니다. 벡터 검색에서 반환된 벡터와 연결된 10개 행 중 열이 accepted 1과 같지 않은 경우 결과는 비어 있습니다.
SELECT TOP (10) s.id,
s.title,
r.distance
FROM VECTOR_SEARCH(
TABLE = dbo.sessions AS s,
COLUMN = embedding,
SIMILAR_TO = @qv,
METRIC = 'cosine',
TOP_N = 10
) AS r
WHERE accepted = 1
ORDER BY r.distance;
보기에서 VECTOR_SEARCH 사용할 수 없습니다.
VECTOR_SEARCH 뷰 본문에 사용할 수 없습니다.
Examples
예제 1
다음 예제에서는 테이블의 문서와 가장 유사한 10개 문서를 Pink Floyd music style 찾습니다 wikipedia_articles_embeddings .
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDING(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT TOP (10) s.id,
s.title,
r.distance
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
예제 2
예제 1과 동일하지만 이번에는 쿼리 벡터가 변수 대신 다른 테이블에서 가져옵니다.
CREATE TABLE #t
(
id INT,
q NVARCHAR (MAX),
v VECTOR(1536)
);
INSERT INTO #t
SELECT id,
q,
AI_GENERATE_EMBEDDINGS(q USE MODEL Ada2Embeddings)
FROM (VALUES (1, N'four legged furry animal'),
(2, N'pink floyd music style')
) AS S(id, q);
SELECT TOP (10) t.id,
s.distance,
t.title
FROM #t AS qv
CROSS APPLY VECTOR_SEARCH(
TABLE = [dbo].[wikipedia_articles_embeddings] AS t,
COLUMN = [content_vector],
SIMILAR_TO = qv.v,
METRIC = 'cosine',
TOP_N = 10
) AS s
WHERE qv.id = 2
ORDER BY s.distance;
예제 3
기본 엔드 투 엔드 예제 사용 CREATE VECTOR INDEX 및 관련 VECTOR_SEARCH 함수입니다. 포함은 조롱됩니다. 실제 시나리오에서는 포함 모델 및 AI_GENERATE_EMBEDDINGS 사용하거나 OpenAI SDK와 같은 외부 라이브러리를 사용하여 포함이 생성됩니다.
다음 코드 블록은 모의 포함 기능이 VECTOR_SEARCH 있는 함수를 보여 줍니다.
- 현재 미리 보기에 필요한 추적 플래그를 사용하도록 설정합니다.
- 데이터 형식
dbo.Articles가 있는 열embedding이 있는 샘플 테이블을 만듭니다. - 모의 포함 데이터를 사용하여 샘플 데이터를 삽입합니다.
- 에서 벡터 인덱스
dbo.Articles.embedding만들기 - 함수를 사용하여 벡터 유사성 검색을 보여 줍니다
VECTOR_SEARCH.
-- 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
);
GO
-- 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]');
GO
-- Step 3: Create a vector index on the embedding column
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (METRIC = 'cosine', TYPE = 'diskann');
GO
-- Step 4: Perform a vector similarity search
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP(3)
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;