다음을 통해 공유


CREATE VECTOR INDEX(Transact-SQL)

SQL Server 2025(17.x) 미리 보기

가장 가까운 인접 항목 검색의 성능을 향상시키기 위해 벡터 열에 대략적인 인덱스를 만듭니다. 벡터 인덱싱 및 벡터 검색의 작동 방식과 정확한 검색과 근사 검색 간의 차이점에 대한 자세한 내용은 SQL Database 엔진의 벡터를 참조하세요.

미리 보기 기능

비고

이 기능은 미리 보기로 제공되며 변경될 수 있습니다. 온라인 서비스에 대한 SLA(서비스 수준 계약)에서 미리 보기 사용 약관을 읽어야 합니다.

이 기능은 미리 보기로 제공됩니다. 이 기능을 사용하려면 다음 추적 플래그를 사용하도록 설정해야 합니다.

DBCC TRACEON(466, 474, 13981, -1)

사용하기 전에 현재 제한 사항을 확인해야 합니다.

문법

Transact-SQL 구문 표기 규칙

CREATE VECTOR INDEX index_name
ON object ( vector_column )  
[ WITH (
    [,] METRIC = { 'cosine' | 'dot' | 'euclidean' }
    [ [,] TYPE = 'DiskANN' ]
    [ [,] MAXDOP = max_degree_of_parallelism ]
    [ [,] DROP_EXISTING = { ON | OFF } ]
) ]
[ 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 미리 보기의 지원되는 기능을 참조하세요.

DROP_EXISTING = { 켜짐 | 꺼짐 }

수정된 사양을 사용하여 기존 벡터 인덱스를 삭제 및 다시 빌드하고 인덱스에 대해 동일한 이름을 유지하는 옵션입니다. 기본값은 OFF입니다.

  • ON

    기존 인덱스를 삭제하고 다시 만들도록 지정하며, 이름은 index_name 매개 변수와 같아야 합니다.

  • OFF

    기존 인덱스를 삭제하고 다시 만들지 않도록 지정합니다. 지정된 인덱스 이름이 이미 존재하는 경우 SQL Server 오류가 표시됩니다.

제한점

현재 미리 보기에는 다음과 같은 제한 사항이 있습니다.

  • 벡터 인덱스 분할할 수 없습니다. 파티션이 지원되지 않습니다.
  • 테이블에는 단일 열, 정수, 기본 키 클러스터형 인덱스가 있어야 합니다.
  • 벡터 인덱스가 있는 테이블은 읽기 전용이 됩니다. 테이블에 벡터 인덱스가 있는 동안에는 데이터 수정이 허용되지 않습니다.
  • 벡터 인덱스는 구독자에 복제되지 않습니다.

권한

사용자에게 테이블에 대한 권한이 있어야 합니다 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와 같은 외부 라이브러리를 사용하여 포함이 생성됩니다.

다음 코드 블록은 다음 단계를 사용하여 모의 포함을 만듭니다.

  1. 현재 미리 보기에 필요한 추적 플래그를 사용하도록 설정합니다.
  2. 데이터 형식 dbo.Articles가 있는 열 embedding 이 있는 샘플 테이블을 만듭니다.
  3. 모의 포함 데이터를 사용하여 샘플 데이터를 삽입합니다.
  4. 에서 벡터 인덱스 dbo.Articles.embedding만들기
  5. 함수를 사용하여 벡터 유사성 검색을 보여 줍니다 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;