RAG・検索基盤

Milvusとは|1次元を4bitまで縮めたら6.3%の容量になったが、再現率が42.7%まで落ちた

縮めると再現率はどうなるのか組に分けるとどこまで効くのか索引を作る手間はどれだけか

1次元を8bitで持てば再現率94.8%、容量は元の12.5%でした。

4bitまで縮めると容量は6.3%になりますが、再現率は42.7%まで落ちます。

この記事の要点

  • 8bitで94.8%・12.5%
  • 4bitで42.7%・6.3%
  • 2bitでは6.0%
  • 64組で1組だけ見ると34.1%

4bitまで縮めると、容量6.3%で再現率42.7%

索引は再現率を下げます。下げ幅は縮め方で決まり、途中から急に落ちます。

Milvusでは、索引を使うと再現率が下がります。公式はさらに、索引を使うと通常は再現率が下がる(影響はごくわずかだが、それでも意味を持つ)と述べています。

どれだけ下がるのか。持ち方を粗くして実際に測って比べました。

1次元あたりの桁数を変える

text
登録 20,000件(64次元)・上位10件・問い合わせ 200回
元の大きさ 1件あたり 512 バイト(64次元 × 8バイト)

1次元あたり  1件の大きさ  全体の大きさ  再現率   元に対する比
        2bit         16B        0.3 MB     6.0%          3.1%
        4bit         32B        0.6 MB    42.7%          6.3%
        8bit         64B        1.2 MB    94.8%         12.5%

参考: 元のまま持つと全体で 9.8 MB

8bitなら再現率94.8%で、容量は元の12.5%です。8分の1に縮めて、ほとんど落ちていません。

4bitにすると容量は半分になりますが、再現率は42.7%です。半分にした代償が大きく出ました。

落ち方は直線ではない

8bitから4bitで52.1ポイント、4bitから2bitで36.7ポイント落ちます。1段目の落ち幅がいちばん大きいという結果でした。

つまり縮める判断は、8bitで止めるかどうかがいちばん大きな分かれ目になります。

縮め方そのものの仕組みは直積量子化の記事で扱いました。

容量を半分にすると、再現率は半分どころではなく落ちる。

再現率(%)元に対する容量の割合(%)→10413.82bit4bit8bit登録2万件・64次元での実測。元のまま持つと9.8MB、8bitなら1.2MB。
図1 ── 1次元あたりの桁数と、置く量・再現率
出典Milvus 公式ドキュメント「Index Explained」2026-08-18 確認
Moreover, using an index typically lowers the recall rate (though the effect is negligible, it still matters).
原文Milvus 公式ドキュメント「Index Explained」 この内容の有効期限2027-02-18

64組のうち1組だけ見ると再現率34.1%

組に分けて近い組だけを見ます。見る組の数を増やすと、再現率と時間が同時に伸びます。

Milvusの組に分ける索引は、記憶の効率と探索の速さを釣り合わせます。公式は組に分ける索引は、データを塊へ分けることで、記憶の効率と探索の性能を釣り合わせると述べています。

見る組の数でどう変わるのか。実際に探して数えました。

見る組の数を変える

text
登録 20,000件(64次元)・上位10件・問い合わせ 200回
全探索 1回あたり 5403 マイクロ秒

組の数  見る組  再現率   走査件数  1回あたり  全探索比
   64組      1組    34.1%       319件       107 μs    50.5倍
   64組      4組    88.2%     1,261件       445 μs    12.1倍
   64組      8組   100.0%     2,484件       915 μs     5.9倍
   64組     16組   100.0%     4,897件      1768 μs     3.1倍

1組だけなら50.5倍の速さですが、再現率は34.1%です。3件に2件を取りこぼします。

8組まで見れば100.0%になり、それでも5.9倍の速さでした。

増やしても無駄になる範囲

16組まで見ると走査は4,897件に増えますが、再現率は8組と同じ100.0%です。

つまり8組から先は、時間だけが2倍になって得るものがありません。止める位置を測って決めることになります。

この形はIVFの記事で扱っていて、組の数と見る数の組み合わせで決まります。

出典Milvus 公式ドキュメント「Index Explained」2026-08-18 確認
IVF indexes balance memory efficiency with search performance by partitioning data into clusters.
原文Milvus 公式ドキュメント「Index Explained」 この内容の有効期限2027-02-18

作る時間を取り戻すには、2万回の問い合わせが要る

前もって作る時間がかかります。問い合わせの回数が少ないと、その時間を取り戻せません。

Milvusの索引には、作るための費用があります。公式は索引は探索を速くするが、前処理の時間、場所、そして探索中の記憶を余分に必要とすると述べています。

その時間はどれくらいで取り戻せるのか。実際に作って測りました。

件数を変える

text
64次元・上位10件・問い合わせ 200回。件数を変えて比べる
近似のほうは 1点あたりの枝 8本・探索の幅 64 で組み立てる

件数        全探索1回      索引を作る      近似1回      近似の再現率      追い抜くまでの問い合わせ
      200件         30 μs            6 ms        31 μs             11.5%                      追い抜かない
    1,000件        168 μs          164 ms        94 μs              9.3%                      2,201回
    5,000件        987 μs         4823 ms       171 μs              7.2%                      5,916回
   20,000件       5364 μs       106193 ms       257 μs              9.3%                     20,795回

2万件では、索引を作るのに106秒かかりました。取り戻すには20,795回の問い合わせが要ります。

200件では、そもそも近似のほうが遅くなりました。追い抜きません

作り直しのたびに払う

この時間は、データを入れ替えるたびに払います。頻繁に入れ替える用途では、回数が積み上がります。

だから見るのは登録件数だけではありません。問い合わせの回数と、作り直しの頻度の両方です。

余談 この計測での注意

3つの計測はいずれも手元で書いた模型で、実際のMilvusを動かしたものではありません。近似探索の実装は単純な近傍グラフで、実際の製品より再現率が低く出ています。索引を作る時間も総当たりで枝を選んでいるため、実際よりずっと遅い値です。縮め方も1次元ずつ区切る簡単な方式で、実装によって再現率は変わります。ここで見せているのは、縮めたときの再現率の落ち方が直線ではないという点と、見る組を増やしても効かなくなる位置があるという点の2つです。

出典Milvus 公式ドキュメント「Index Explained」2026-08-18 確認
An index speeds up the search, but incurs additional preprocessing time, space, and RAM during the search.
原文Milvus 公式ドキュメント「Index Explained」 この内容の有効期限2027-02-18

よくある質問

Milvusの索引は何をしますか
探索を速くします。ただし前処理の時間・容量・実行時の記憶を余分に使うと説明されています。
索引を使うと再現率は下がりますか
下がります。公式も、影響はわずかとしつつ確かに下がると述べています。
どこまで縮めてよいですか
この計測では8bitで94.8%、4bitで42.7%でした。半分に縮めた時点で大きく落ちます。
組に分ける索引はどう効きますか
見る組の数で決まります。64組のうち1組だけなら34.1%、8組見れば100.0%でした。

まとめ

  • 索引は速さと引き換え
  • 縮めると再現率が落ちる
  • 落ち方は直線ではない
  • 組の数と見る数で決まる

今日から始められること

  1. 許せる再現率の下限を決める
  2. 1件あたりの容量を数える
  3. 縮めた場合の容量を見積もる
  4. 見る組の数を試す

実務で組んだMilvusのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る