SQL Server 2025 のベクターデータ型 (ベクトルデータ型) / ベクターインデックスについて気になっていた内容をいくつか確認したので、その内容を。
Contents
ベクターデータ型のデータサイズ
SQL Server 2025 のベクターデータ型の使用については次の情報から確認ができます。
SQL Server 2025 のベクターデータ型では「float32」「float16」の 2 種類の精度を選択することができ、デフォルトでは float32 が使用されています。
float32: 4 バイト / float16: 2 バイト となるかと思いますので、float32 のほうが精度が高くなる代わりにデータサイズが大きくなります。
float16 にした場合、ベクター検索する際の検索対象のベクターについても float16 を明示的に指定しする必要があるのはポイントかと。
DECLARE @v2 AS VECTOR(1536, float16)= AI_GENERATE_EMBEDDINGS(@keyword USE MODEL [text-embedding-ada-002]);
「text-embedding-ada-002」を使用した場合、ディメンション数は「1,536」となりますが、この場合、ベクターデータ型に必要なデータサイズは次のようになっていました。
- float32 (既定):6,152 バイト
- float16: 3,080 バイト
8 バイトヘッダーが付与されているため、少しサイズが大きくなりますが、1 次元で各データ型のバイト数が消費されていますね。
これについては ベクター検索のオーバーヘッドストレージと処理は何ですか? に記載されています。
SQL Server データ ページには最大 8,060 バイトを保持できるため、ベクターのサイズは、1 つのページに格納できるベクターの数に影響します。 たとえば、1,024 次元のベクターがあり、各次元が単精度 浮動小数点数 (4 バイト) の場合、ベクターの合計サイズは 4,104 バイト (4096 バイトペイロード + 8 バイト ヘッダー) になります。 これにより、1 ページに収まるベクターの数が 1 に制限されます。
ベクターデータ型は次元数に応じて必要となるデータサイズが増加しますので、ベクターデータ型を使用する場合、どの程度データ領域が必要となるのかは考慮する必要があるかと。
DiskANN について
SQL Server 2025 のベクターインデックスについては DiskANN が使用されています。
SQL Database エンジンでは、ベクター インデックスは DiskANN アルゴリズムに基づいています。
インデックスの作成に使用される ANN アルゴリズム の種類。 現在、
DiskANNのみがサポートされています。 DiskANN が既定値です。
SQL Database エンジンでは、ベクター インデックスは DiskANN アルゴリズムに基づいています。
DiskANN は Cosmos DB / Azure Database for PostgreSQL でも使用されています。
DiskANN は Microsoft が提供しているベクターインデックスの様々な場所で使用されており、HNSW との比較が話題になることが多いので、特徴の概要については把握しておきたいですね。
SQL Server 2025 のベクターインデックスの特徴について
SQL Server 2025 のベクターインデックスですがいくつかの特徴があります。
ベクターインデックスを作成すると読み取り専用になる
ベクターインデックスを作成する に記載されていますが、SQL Server 2025 のベクターインデックスは作成をするとテーブルが読み取り専用になります。
ベクター インデックスを持つテーブルは読み取り専用になります。 テーブルにベクター インデックスが存在する間、データの変更は許可されません。
Microsoft FabricのAzure SQL DatabaseおよびSQL Databaseでは、
ALLOW_STALE_VECTOR_INDEXデータベーススコープ設定をONに設定でき、これによりテーブルを再び書き込めるようにできます。
Azure SQL Database であれば、ALLOW_STALE_VECTOR_INDEX を有効にすることで、新しく追加したデータをベクターインデックスに認識させるためには、インデックスの再作成が必要となりますが、データの追加は可能な状態にすることができます。
この機能は現時点では、SQL Server 2025 に実装されていないため、ベクターインデックスが設定されている状態で読み取り専用を解除するということができません。
SQL Server 2025 のベクターインデックスはプレビュー機能ですので、一般提供が開始される際には ALLOW_STALE_VECTOR_INDEX の設定がサポートされる可能性はゼロではないかもしれません。
ベクターインデックス用のテーブル
ベクターインデックスを作成すると内部的には「sys.vector_index_Graph_Edge_table_<parent_object_id>_<index_id>」「sys.vector_index_quantization_table_<parent_object_id>_<index_id>」というテーブルが作成されており、このテーブルでベクターインデックスのデータが管理されているようです。
メインのデータは「sys.vector_index_Graph_Edge_table」となるようです。
これらのテーブルは DAC で接続した場合は実際のデータを確認することができます。