メインコンテンツへスキップ

ベクトルDBは更新頻度で選択が変わる|追記で済むか、索引を作り直すかの分かれ目

更新が多いデータでは、検索性能より先に「索引を作り直す運用」が重くなる。公式ドキュメントで確認できる範囲で、更新頻度が選択に効く箇所を整理する。

この記事で分かること/分からないこと

  • 分かること: 追記・上書き・削除が索引に与える影響が、索引の種類によってどう違うか(公式ドキュメントで確認できた範囲)
  • 分かること: 更新の多いデータで「作り直し」が運用の律速になる理由
  • 分からないこと: 自社のデータで、どの頻度なら追記で済み、どこから作り直しが要るか(件数と索引パラメータに依存する)
  • 分からないこと: 各サービスの内部の再構築タイミングの細部(公開されている範囲でしか書いていない)

編集部の自社RAG基盤は、根拠データの差分判定にchecksumを使い、変わった分だけ再生成する構成である(出所: /home/sol/convai-platform/docs/STORAGE_AND_BILLING.md、確認日2026-09-06)。ただしこれはベクトルDBの索引更新ではなく、確定配信用の索引の再生成の話であり、本稿で扱うベクトル索引の更新とは仕組みが異なる。ベクトルDBについては自社の実測を持っていない。

上書き(upsert)は追記より扱いが単純に見えて、索引側の負担は別

主要なベクトルDBは、同じIDのレコードを再投入すると上書きになる upsert の操作を提供している。Pineconeの公式ドキュメントには「Upsert records」として、密ベクトル・疎ベクトル・バッチでの upsert の手順がまとまっている(出所: https://docs.pinecone.io/guides/index-data/upsert-data 、確認日2026-09-06)。

アプリケーション側から見れば「同じIDで投げ直せば更新できる」で済むが、索引側では古いベクトルの扱いが残る。この点は次の pgvector の記述が分かりやすい。

更新が残す「死んだ行」が検索結果の件数を減らす

pgvectorのREADMEは、HNSW索引で取得できる結果の件数が ef_search(既定値40)に制限されること、そして死んだタプル(dead tuples)やクエリの絞り込み条件によって、結果がさらに少なくなりうることを明記している。対策として、必要に応じて索引を追加で走査する iterative index scans を有効にすることを挙げている(出所: https://raw.githubusercontent.com/pgvector/pgvector/master/README.md 、確認日2026-09-06)。

ここで重要なのは、更新や削除で残った死んだ行が、性能ではなく「返ってくる件数」に影響するという点である。更新の多いデータで「上位10件を頼んだのに7件しか返らない」という症状が出たら、索引の劣化ではなく死んだ行の蓄積を疑う必要がある。

索引の種類で、更新への強さが違う

同じREADMEは、IVFFlat索引について、リストに分割してその一部を探す方式であるため構築が速いこと、そして良い再現率を得るための鍵として、リスト数の設定と、探索するリスト数(probes)の設定を挙げている(同上)。IVFFlatは投入済みのデータを元にリストの中心を決めるため、データの分布が大きく変わる更新が続くと、リストの切り方が実態と合わなくなる。この場合は索引の作り直しが要る。

一方HNSWは構築が遅くメモリを多く使う代わりに、投入順に依存しにくい(同上の性質から)。更新が多くて作り直しを避けたいならHNSW、作り直しても構わないほど更新が少ないならIVFFlat、という分かれ方になる。件数の観点は規模で何が変わるかで扱った。

索引の設定は「全体で1つ」であることが多い

Qdrantの索引に関するドキュメントは、セグメントはそれぞれ独立して存在するが、索引自体のパラメータはコレクション全体に対して設定される、と述べている(出所: https://qdrant.tech/documentation/concepts/indexing/ 、確認日2026-09-06)。

これが更新頻度と関係するのは、「更新の多い部分と少ない部分で索引の設定を変えたい」という要求が通らない場合があるからである。更新の性質が異なるデータを1つのコレクションに入れると、どちらかに合わせた設定にならざるを得ない。更新の多いデータと少ないデータを分けて持つかどうかは、マルチテナントの分け方と同じ判断になる。

更新頻度から決めるときの順序

公式ドキュメントで確認できた範囲から、判断の順序は次のようになる。まず、更新が「追記だけ」か「上書き・削除を含む」かを分ける。追記だけなら索引の劣化は起きにくい。上書き・削除を含むなら、死んだ行の蓄積と、それが結果件数に与える影響を監視項目に入れる。次に、データの分布が変わる更新かどうかを見る。分布が変わるならIVFFlat系は作り直しが前提になる。最後に、更新の性質が違うデータを1つにまとめてよいかを判断する。

いずれも、どの頻度でどうなるかは自社のデータで測る必要がある。

よくある質問

Q1. 同じIDで投げ直せば更新できるのか

Pineconeなど主要なベクトルDBは upsert を提供しており、アプリケーション側からは同じIDで再投入すれば上書きになる。ただし索引側では古いデータの扱いが残る。pgvectorのREADMEが述べるように、死んだ行は検索結果の件数に影響しうる。

Q2. 更新が多いと検索が遅くなるのか

公式ドキュメントで確認できた範囲では、遅くなるより先に「返ってくる件数が減る」症状が出る。pgvectorは ef_search の既定値40に対して、死んだ行や絞り込み条件で結果がさらに減りうると明記し、iterative index scans を対策として挙げている。

Q3. 索引はどのくらいの頻度で作り直すべきか

一般化できない。IVFFlatはデータ分布に依存するため、分布が変わる更新が続くと作り直しが要る。HNSWは構築が遅い代わりに投入順に依存しにくい。頻度は自社のデータの更新の性質と件数で決まる。

Q4. 自社ではどう更新しているのか

編集部の自社RAG基盤は、根拠データの差分をchecksumで判定し、変わった分だけ再生成する構成である。ただしこれは確定配信用の索引の話で、ベクトル索引の更新ではない。ベクトルDBの更新運用について自社の実測は持っていない。

更新頻度は、選定の段階で見落とされやすく、運用に入ってから効いてくる。自社の更新パターンでどう構成すべきか相談したい方は、お問い合わせから編集部までご連絡いただきたい。

関連する取り組み

CONNECTED SERIES
AIで投資の壁を越える
18 本の実装記録。AI 投資の「予測不能」と言われる 9 つの壁を、コードと実データで検証した連載。
note で読む →
B2B API
Persona API
行動データから再構成した 2,245 体のペルソナを LLM 推論に注入。AI 出力の文脈リッチ化、顧客 segmentation に。
詳細を見る →

AI導入のご相談を承っています

AI導入支援の実務経験を活かし、お手伝いしています。お気軽にご相談ください。

他のカテゴリも読む

AI最新ニュース AI業界の最新ニュースと企業動向 AI導入戦略 AI投資判断・ROI分析・導入ロードマップ 業界別AI活用 製造・金融・小売など業界別のAI活用動向 導入事例 企業のAI実装プロジェクト事例とコンサルティング知見 研究論文 NeurIPS、ICMLなどの注目論文レビュー