対象者: SQL Server 2025 (17.x)
Azure SQL Database
SQL database in Microsoft Fabric
ベクトル列に近似インデックスを作成して、最も近い近傍検索のパフォーマンスを向上させます。 ベクター インデックス作成とベクター検索のしくみ、および正確な検索と近似検索の違いの詳細については、 SQL Database エンジンのベクター検索とベクター インデックスを参照してください。
Fabric 内の Azure SQL Database と SQL データベース
この機能はまだプレビュー段階です。 使用する前に、 現在の制限事項を 確認してください。
注
この記事で紹介しているテクノロジはプレビュー機能であり、「Microsoft Azure プレビューの追加利用規約」に従うことを条件として提供されます。
SQL Server 2025 プレビュー機能
SQL Server 2025ではこの機能はプレビュー段階で変更される可能性があります。 この機能を使用するには、PREVIEW_FEATURESdatabase スコープ構成を有効にする必要があります。
使用する前に、 現在の制限事項を 確認してください。
構文
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
ベクター インデックスの作成に使用する列。 ベクター型である必要があります。
メトリック
指定された 2 つのベクトル間の距離を計算するために使用する距離メトリックの名前を持つ文字列。 次の距離メトリックがサポートされています。
-
cosine- コサイン距離 -
euclidean- ユークリッド距離 -
dot- (負の) ドット積
TYPE
インデックスの作成に使用される ANN アルゴリズム の種類。 現在、DiskANN のみがサポートされています。 DiskANN が既定値です。
MAXDOP
インデックス操作の 並列処理の最大次数 構成オプションをオーバーライドします。 詳細については、「サーバーの構成: 並列処理の最大次数」を参照してください。
MAXDOPを使用して、並列処理の程度と、インデックス作成操作の結果のリソース消費量を制限します。
max_degree_of_parallelism は次のように指定できます。
1並列プラン生成を抑制します。
>1
並列インデックス操作で使用される並列処理の最大次数を、現在のシステム ワークロードに基づいて指定された数以下に制限します。
0(既定値)現在のシステム ワークロードに基づいて減らされない限り、サーバー、データベース、またはワークロード グループ レベルで指定された並列処理の次数を使用します。
詳細については、「 並列インデックス操作の構成」を参照してください。
注
並列インデックス操作は、SQL Server のすべてのエディションで使用できるわけではありません。 SQL Server エディションでサポートされている機能の一覧については、「 SQL Server 2022 のエディションおよびサポート機能 」または 「SQL Server 2025 のエディションとサポート機能」をご覧ください。
制限事項
現在のプレビューには、次の制限があります。
ベクター インデックスをパーティション分割することはできません。 パーティションはサポートされません。
テーブルには、単一の列、整数、主キーのクラスター化インデックスが必要です。
ベクター インデックスはサブスクライバーにレプリケートされません。
ベクター インデックスを持つテーブルは読み取り専用になります。 テーブルにベクター インデックスが存在する間、データの変更は許可されません。
Microsoft FabricのAzure SQL DatabaseおよびSQL Databaseでは、
ALLOW_STALE_VECTOR_INDEXデータベーススコープ設定をONに設定でき、これによりテーブルを再び書き込めるようにできます。注
ALLOW_STALE_VECTOR_INDEXデータベーススコープ設定オプションは、SQL Server 2025(17.x)では現在利用できません。ベクトルインデックスは、新しいデータがテーブルに挿入または更新されたときに更新されません。 ベクターインデックスをリフレッシュするには、削除して再作成する必要があります。
既知の問題
詳細については、「既知の 問題」を参照してください。
権限
ユーザーには、テーブルに対する ALTER 権限が必要です。
例示
サンプルで使用されているデータベースの詳細については、 Vector Embeddings を使用して Wikipedia の記事をダウンロードしてインポートします。
例では、タイトルの Wikipedia 記事の埋め込みを格納するwikipedia_articles型の列title_vectorvectorという名前のテーブルが存在することを前提としています。
title_vector は、1,536 次元のベクトルを返す text-embedding-ada-002 や text-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 = 'DOT', 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
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
);
-- 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;