ベクトル検索のパフォーマンスを向上させる
TiDB Vector Searchを使用すると、画像、ドキュメント、その他の入力に類似した結果を検索する近似近傍法(ANN)クエリを実行できます。クエリのパフォーマンスを向上させるには、以下のベストプラクティスを確認してください。
注記:
ベクター検索機能はベータ版です。予告なく変更される可能性があります。バグを見つけた場合は、GitHubで問題報告を行ってください。
注記:
ベクトル検索機能は、TiDB Self-Managed、 TiDB Cloudスターター TiDB Cloudエッセンシャル利用できますTiDB Cloud専用 Self-Managed およびTiDB Cloud Dedicated の場合、TiDB バージョンは v8.4.0 以降である必要があります(v8.5.0 以降を推奨)。
ベクトル列にベクトル検索インデックスを追加する
ベクター検索インデックス 、リコール率がわずかに低下するだけのトレードオフで、ベクトル検索クエリのパフォーマンスを通常 10 倍以上大幅に向上させます。
ベクトルインデックスが完全に構築されていることを確認する
大量のベクターデータを挿入すると、その一部がデルタレイヤーで永続化を待機している可能性があります。このようなデータのベクターインデックスは、データが永続化された後に構築されます。すべてのベクターデータがインデックス化されるまで、ベクター検索のパフォーマンスは最適ではありません。インデックス構築の進行状況を確認するには、 インデックス構築の進行状況をビュー参照してください。
ベクトルの次元を減らすか埋め込みを短くする
ベクトルの次元が大きくなるにつれて、ベクトル検索のインデックス作成とクエリの計算の複雑さが大幅に増加し、より多くの浮動小数点の比較が必要になります。
パフォーマンスを最適化するには、可能な限りベクトル次元を減らすことを検討してください。これは通常、別の埋め込みモデルへの切り替えが必要になります。モデルを切り替える際には、モデルの変更がベクトルクエリの精度に与える影響を評価する必要があります。
OpenAI text-embedding-3-large
などの特定の埋め込みモデルは短縮埋め込みサポートしています。これは、埋め込みの概念表現特性を失うことなく、ベクトルシーケンスの末尾からいくつかの数値を削除します。このような埋め込みモデルを使用して、ベクトルの次元を削減することもできます。
結果からベクター列を除外する
ベクター埋め込みデータは通常サイズが大きく、検索プロセスでのみ使用されます。クエリ結果からベクター列を除外することで、TiDBサーバーとSQLクライアント間で転送されるデータ量を大幅に削減し、クエリパフォーマンスを向上させることができます。
ベクター列を除外するには、すべての列を取得するためにSELECT *
使用するのではなく、取得する列をSELECT
句で明示的にリストします。
インデックスをウォームアップする
一度も使用されていない、または長期間アクセスされていないインデックス(コールドアクセス)にアクセスする場合、TiDBはインデックス全体をメモリではなくクラウドstorageまたはディスクから読み込む必要があります。このプロセスには時間がかかり、多くの場合、クエリのレイテンシーが長くなります。さらに、長期間(例えば数時間)SQLクエリが実行されない場合、コンピューティングリソースが再利用されるため、以降のアクセスはコールドアクセスになります。
このようなクエリのレイテンシーを回避するには、実際のワークロードの前に、ベクトル インデックスにヒットする同様のベクトル検索クエリを実行して、インデックスをウォームアップします。