何が発表されたのか
米マイクロソフトは、同社の主要なクラウドデータベースサービスである「Azure SQL Database(Hyperscaleを含む)」および「Fabric SQL」において、最先端のベクトルインデックス技術である「DiskANN」の一般提供(GA:General Availability)を開始したと発表しました。
この機能は、リレーショナルデータベース(RDB)の内部に、グラフベースの高次元ベクトルインデックスを直接統合するものです。これまでプレビュー段階にあった機能が正式リリースとなり、商用環境での利用に耐えうる安定性と性能が保証されました。これにより開発者は、エンタープライズ向けの生成AIアプリケーション、セマンティック検索システム、RAG(Retrieval-Augmented Generation:検索拡張生成)などのシステムを、追加の専用ベクトルデータベースを導入することなく、使い慣れたSQL環境のみで構築できるようになります。
発表された機能・アップデートの全容
ブルートフォース検索の限界とインデックスの必要性
データベースにネイティブなベクトルデータ型とベクトル関数が導入されたことで、初期のプロトタイプ構築は容易になりました。しかし、データ量が増大するにつれて深刻なパフォーマンス低下が発生します。インデックスが存在しない状態でのベクトル検索は、すべての行に対してベクトルの距離計算を行う「ブルートフォース(総当たり)検索」となります。
このアプローチは、データ件数が1万行程度であればミリ秒単位で処理できますが、100万行に達すると秒単位、1000万行を超えると分単位の時間を要するようになり、実質的に運用不可能な状態に陥ります。高次元ベクトルの距離計算は、浮動小数点演算の負荷が極めて高いためです。そこで、検索の計算量を劇的に削減し、大規模データでも高速に応答を返すための専用のインデックス構造が必要となります。
Microsoft Research発のグラフベースインデックス「DiskANN」の統合
マイクロソフトが採用した解決策が、同社の研究開発部門であるMicrosoft Researchが開発し、2019年の機械学習国際会議「NeurIPS」で発表されたベクトルインデックスアルゴリズム「DiskANN」です。これはすでに、検索エンジン「Bing」、協調AI「Microsoft 365 Copilot」、そして「Azure AI Search」などの大規模商用サービスで、数十億から数兆件規模のインデックスを支える実績のある技術です。
DiskANNの最大の特徴は、メモリ空間を極端に圧迫しないアーキテクチャにあります。一般的なベクトルインデックス(HNSWなど)は、高速性を維持するためにすべてのインデックスデータを主メモリ(RAM)上に展開する必要があります。これに対しDiskANNは、SSD(ソリッド・ステート・ドライブ)などの高速なディスクストレージを活用するように設計されています。アクティブに探索される主要なグラフ構造のみをメモリに保持し、詳細なベクトルデータ本体はディスク上に配置することで、極めて高いコスト効率で数十億規模のベクトルをインデックス化できます。ANN(Approximate Nearest Neighbor:近似最近傍探索)の手法を用いることで、正確な結果に限りなく近い近似値を、圧倒的な速度で導き出します。
リレーショナルフィルタと融合する「反復フィルタリング」
実際の業務アプリケーションにおける検索要件は、「類似するデータを10件探す」という単純なベクトル検索だけでは完結しません。例えばカスタマーサポートのシステムでは、「ステータスが『未解決(Open)』であり、特定の製品カテゴリに属し、かつ過去30日以内に投稿されたチケットの中から、現在の問い合わせに類似する上位10件を探す」といった複合的な条件が求められます。
従来のベクトル専用データベースでは、ベクトル検索を最初に行い、その結果に対して後からリレーショナルな条件で絞り込む「ポストフィルタリング(後フィルタリング)」が一般的でした。しかしこの方法では、ベクトル検索で返された上位10件のなかにフィルタ条件に合致するデータが1件も含まれていない場合、最終的な検索結果が空になってしまうという致命的な問題があります。Azure SQL Databaseが実装したDiskANNは、グラフ探索のプロセス自体の中にリレーショナルなフィルタ条件を組み込んで実行する「反復フィルタリング(Iterative Filtering)」をサポートしています。これにより、フィルタ条件を満たす正しい上位N件を確実かつ高速に取得できます。
リアルタイムなデータ更新に追従する非同期DMLサポート
業務システムでは、データが静的に固定されていることは稀であり、常に新しいレコードの挿入(INSERT)、既存レコードの更新(UPDATE)、不要レコードの削除(DELETE)が発生します。Azure SQL Databaseのベクトルインデックスは、これらのDML(データ操作言語)操作に完全に対応しています。
デモでは、新しい記事データを挿入した直後に、その内容に対応するベクトル検索を実行すると、新データが即座に検索結果の最上位に反映される様子が示されました。また、特定の記事の内容を「量子コンピューティング」に関するものに更新(UPDATE)すると、それまで「ベクトルデータベース」の検索クエリでヒットしていた当該記事が結果から除外され、代わりに「量子コンピューティング」の検索クエリの上位に表示される挙動が確認されました。これらのインデックス更新処理は、データベースエンジンのバックグラウンドタスクとして非同期かつ自動的に実行されるため、アプリケーション側で手動のインデックス再構築や同期処理を記述する必要はありません。インデックスの更新状況は、専用のシステム動的管理ビュー(DMV)である sys.dm_db_vector_index_status を通じて、進行度(パーセンテージ)やタスクのステータスをリアルタイムに監視可能です。
オプティマイザによる正確な検索と近似検索の自動選択
Azure SQL Databaseのクエリオプティマイザは、ベクトル検索のクエリに対しても高度なインテリジェンスを発揮します。開発者は、クエリごとに「正確な全件検索を行うべきか」あるいは「DiskANNインデックスを用いた近似検索を行うべきか」をコード上で判断して書き分ける必要はありません。
クエリ内に WITH APPROXIMATE 句を指定しておくだけで、オプティマイザがテーブルの統計情報やフィルタ条件の「選択度(Selectivity)」を分析し、最もコストの低い実行計画を自動的に選択します。例えば、フィルタ条件によって対象データが数件から数十件程度にまで極端に絞り込まれる場合、DiskANNのグラフ探索を行うよりも、絞り込まれた数件に対して直接ベクトル距離を計算(正確な検索)した方が処理コストは低くなります。デモでは、選択度の高いクエリを実行した際、実行計画においてDiskANNインデックスのシーク(Vector Index Seek)ではなく、リレーショナルインデックスのシークとフィルター処理、その後の直接計算が自動的に選択される挙動が示されました。開発者は同一のSQL記述のままで、常に最適なパフォーマンスを享受できます。
10億行スケールでの超高速ベクトル検索デモ
動画のハイライトとして、10億行(1 Billion rows)のベクトルデータを格納した実環境のデータベースを用いた、検索デモが実行されました。このデモは、Azure SQL DatabaseのHyperscale層で稼働する環境で実施されました。
10億行のテーブルに対して、VECTOR_SEARCH 関数を用いて最も類似度の高い上位10件を探索するクエリを実行したところ、応答時間はわずか「32ミリ秒」を記録しました。CPUの処理時間(CPU time)は31ミリ秒、経過時間(Elapsed time)は32ミリ秒であり、実質的に1秒をはるかに下回る一瞬の処理で検索が完了していることが示されました。実行計画を確認すると、バックグラウンドで「Vector Index Seek (DiskANN)」が稼働しており、10億行という膨大なデータスケールに対しても、DiskANNのグラフ探索アルゴリズムとSSDストレージの最適化が極めて有効に機能していることが実証されました。




