次の方法で共有


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' }

指定された 2 つのベクトル間の距離を計算するために使用する距離メトリックの名前を持つ文字列。 次の距離メトリックがサポートされています。

  • 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 またはエディションのエディションとサポートされている機能、および SQL Server 2025 プレビューのサポートされる機能を参照してください。

DROP_EXISTING = { ON |OFF }

変更された仕様で既存のベクター インデックスを削除して再構築し、インデックスに同じ名前を保持するオプションです。 既定値は OFFです。

  • ON

    既存のインデックスを削除して再構築することを指定します。これはパラメーター index_name と同じ名前である必要があります。

  • OFF

    既存のインデックスを削除および再構築しないことを指定します。 指定するインデックス名が既に存在する場合、SQL Server はエラーを表示します。

制限事項

現在のプレビューには、次の制限があります。

  • ベクター インデックスをパーティション分割することはできません。 パーティションはサポートされません。
  • テーブルには、単一の列、整数、主キーのクラスター化インデックスが必要です。
  • ベクター インデックスを持つテーブルは読み取り専用になります。 テーブルにベクター インデックスが存在する間、データの変更は許可されません。
  • ベクター インデックスはサブスクライバーにレプリケートされません。

権限

ユーザーには、テーブルに対する ALTER 権限が必要です。

例示

サンプルで使用されているデータベースの詳細については、 Vector Embeddings を使用して Wikipedia の記事をダウンロードしてインポートします

例では、タイトルの Wikipedia 記事の埋め込みを格納するwikipedia_articles型の列title_vectorvectorという名前のテーブルが存在することを前提としています。 title_vector は、1,536 次元のベクトルを返す text-embedding-ada-002text-embedding-3-small などの埋め込みモデルで生成された埋め込みであると見なされます。

エンド ツー エンド ソリューションなど、その他の例については、 Azure SQL Database Vector Search サンプル 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;