SQL Server 2025(17.x) 미리 보기
가장 가까운 인접 항목 검색의 성능을 향상시키기 위해 벡터 열에 대략적인 인덱스를 만듭니다. 벡터 인덱싱 및 벡터 검색의 작동 방식과 정확한 검색과 근사 검색 간의 차이점에 대한 자세한 내용은 SQL Database 엔진의 벡터를 참조하세요.
미리 보기 기능
비고
이 기능은 미리 보기로 제공되며 변경될 수 있습니다. 온라인 서비스에 대한 SLA(서비스 수준 계약)에서 미리 보기 사용 약관을 읽어야 합니다.
이 기능은 미리 보기로 제공됩니다. 이 기능을 사용하려면 다음 추적 플래그를 사용하도록 설정해야 합니다.
DBCC TRACEON(466, 474, 13981, -1)
사용하기 전에 현재 제한 사항을 확인해야 합니다.
문법
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" } ]
[;]
주장들
index_name
인덱스의 이름입니다. 인덱스 이름은 테이블 내에서 고유해야 하지만 데이터베이스 내에서 고유할 필요는 없습니다. 인덱 스 이름은 식별자 규칙을 따라야 합니다.
개체
인덱스가 만들어지는 테이블입니다. 기본 테이블이어야 합니다. 로컬 테이블과 전역 모두의 임시 테이블은 지원되지 않습니다.
vector_column
벡터 인덱스 만들기에 사용할 열입니다. 벡터 형식이어야 합니다.
METRIC = { 'cosine' | 'dot' | 'euclidean' }
지정된 두 벡터 간의 거리를 계산하는 데 사용할 거리 메트릭의 이름을 가진 문자열입니다. 지원되는 거리 메트릭은 다음과 같습니다.
-
cosine
- 코사인 거리 -
euclidean
- 유클리드 거리 -
dot
- (음수) 점 제품
TYPE = 'DiskANN'
인덱스 작성에 사용되는 ANN 알고리즘 의 형식입니다. 현재는 DiskANN
만 지원됩니다. DiskANN이 기본값입니다.
MAXDOP = max_degree_of_parallelism
인덱스 작업에 대한 최대 병렬 처리 수준 구성 옵션을 재정의합니다. 자세한 내용은 최대 병렬 처리 수준을 참조하세요.
MAXDOP
사용하여 인덱스 빌드 작업에 대한 병렬 처리 수준 및 결과 리소스 사용을 제한합니다.
max_degree_of_parallelism은 다음 중 하나일 수 있습니다.
1
병렬 계획 생성을 억제합니다.
>1
병렬 인덱스 작업에 사용되는 최대 병렬 처리 수준을 현재 시스템 워크로드에 따라 지정된 수 이하로 제한합니다.
0
(기본값)현재 시스템 워크로드에 따라 감소하지 않는 한 서버, 데이터베이스 또는 워크로드 그룹 수준에서 지정된 병렬 처리 수준을 사용합니다.
자세한 내용은 병렬 인덱스 작업 구성을 참조하세요.
비고
병렬 인덱스 작업은 Microsoft SQL Server의 모든 버전에서 사용할 수 없습니다. SQL Server 버전에서 지원되는 기능 목록은 SQL Server 2022 또는 Edition의 버전 및 지원되는 기능과 SQL Server2025 미리 보기의 지원되는 기능을 참조하세요.
제한점
현재 미리 보기에는 다음과 같은 제한 사항이 있습니다.
- 벡터 인덱스 분할할 수 없습니다. 파티션이 지원되지 않습니다.
- 테이블에는 단일 열, 정수, 기본 키 클러스터형 인덱스가 있어야 합니다.
- 벡터 인덱스가 있는 테이블은 읽기 전용이 됩니다. 테이블에 벡터 인덱스가 있는 동안에는 데이터 수정이 허용되지 않습니다.
- 벡터 인덱스는 구독자에 복제되지 않습니다.
권한
사용자에게 테이블에 대한 권한이 있어야 합니다 ALTER
.
예시
샘플에 사용된 데이터베이스의 세부 정보는 다음에서 찾을 수 있습니다. 벡터 포함을 사용하여 Wikipedia 문서 다운로드 및 가져오기
위키백과 문서의 제목 포함을 저장하는 형식 wikipedia_articles
의 열 title_vector
이 있는 테이블 vector
이 있다고 가정합니다.
title_vector
는 1,536차원의 벡터를 반환하는 text-embedding-ada-002 또는 text-embedding-3-small과 같은 포함 모델을 사용하여 생성된 포함으로 간주됩니다.
엔드투엔드 솔루션을 비롯한 더 많은 예제를 보려면 Azure SQL Database 벡터 검색 샘플 GitHub 리포지토리로 이동합니다.
예제 1
다음 예제에서는 메트릭을 사용하여 열에 title_vector
벡터 인덱스 만들기 cosine
CREATE VECTOR INDEX vec_idx ON [dbo].[wikipedia_articles]([title_vector])
WITH (METRIC = 'cosine', TYPE = 'diskann');
예제 2
다음 예제에서는 (음수 title_vector
) 제품 메트릭을 사용하여 열에 벡터 인덱스(벡터 인덱스) dot
를 만들어 병렬 처리를 8로 제한하고 파일 그룹에 벡터를 SECONDARY
저장합니다.
CREATE VECTOR INDEX vec_idx ON [dbo].[wikipedia_articles]([title_vector])
WITH (METRIC = 'cosine', TYPE = 'diskann', MAXDOP = 8)
ON [SECONDARY]
예제 3
기본 엔드 투 엔드 예제 사용 CREATE VECTOR INDEX
및 관련 VECTOR_SEARCH
함수입니다. 포함은 조롱됩니다. 실제 시나리오에서는 포함 모델 및 AI_GENERATE_EMBEDDINGS 사용하거나 OpenAI SDK와 같은 외부 라이브러리를 사용하여 포함이 생성됩니다.
다음 코드 블록은 다음 단계를 사용하여 모의 포함을 만듭니다.
- 현재 미리 보기에 필요한 추적 플래그를 사용하도록 설정합니다.
- 데이터 형식
dbo.Articles
가 있는 열embedding
이 있는 샘플 테이블을 만듭니다. - 모의 포함 데이터를 사용하여 샘플 데이터를 삽입합니다.
- 에서 벡터 인덱스
dbo.Articles.embedding
만들기 - 함수를 사용하여 벡터 유사성 검색을 보여 줍니다
VECTOR_SEARCH()
.
-- Step 0: Enable Preview Feature
DBCC TRACEON(466, 474, 13981, -1);
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;