ベクトル検索のパフォーマンスを向上させる
TiDB Vector Search を使用すると、画像やドキュメントなどに類似した結果を検索する ANN クエリを実行できます。クエリのパフォーマンスを向上させるには、次のベスト プラクティスを確認してください。
ベクトル列にベクトル検索インデックスを追加する
ベクトル検索インデックスリコール率がわずかに低下するだけのトレードオフで、ベクトル検索クエリのパフォーマンスを通常 10 倍以上大幅に向上させます。
ベクトルインデックスが完全に構築されていることを確認する
ベクトル インデックスは非同期的に構築されます。すべてのベクトル データがインデックスされるまで、ベクトル検索のパフォーマンスは最適ではありません。インデックス構築の進行状況を確認するには、 インデックス構築の進行状況をビュー参照してください。
ベクトルの次元を減らすか埋め込みを短くする
ベクトルのサイズが大きくなるにつれて、ベクトル検索のインデックス作成とクエリの計算の複雑さが大幅に増加し、より多くの浮動小数点の比較が必要になります。
パフォーマンスを最適化するには、可能な限りベクター次元を減らすことを検討してください。通常、これには別の埋め込みモデルに切り替える必要があります。埋め込みモデルの変更がベクター クエリの精度に与える影響を必ず測定してください。
OpenAI text-embedding-3-large
などの特定の埋め込みモデルは埋め込みの短縮をサポートしています。これは、埋め込みの概念表現プロパティを失うことなく、ベクトルシーケンスの末尾からいくつかの数字を削除します。このような埋め込みモデルを使用して、ベクトルの次元を削減することもできます。
結果からベクター列を除外する
ベクター埋め込みデータは通常は大きく、検索プロセス中にのみ使用されます。クエリ結果からベクター列を除外すると、TiDBサーバーと SQL クライアント間で転送されるデータの量が大幅に削減され、クエリのパフォーマンスが向上します。
ベクター列を除外するには、 SELECT *
使用する代わりに、 SELECT
句で取得する列を明示的にリストします。
インデックスをウォームアップする
インデックスがコールド アクセスされると、インデックス全体を S3 からロードするか、メモリではなくディスクからロードするのに時間がかかります。このようなプロセスは通常、テールレイテンシーが高くなります。さらに、長時間 (たとえば数時間) クラスター上に SQL クエリが存在しない場合は、コンピューティング リソースが再利用され、次回はコールド アクセスが発生します。
このようなテールレイテンシを回避するには、ベクトルインデックスにヒットする同様のベクトル検索クエリを使用して、実際のワークロードの前にインデックスをウォームアップします。