1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OracleDB におけるベクトル索引の作成所要時間とサイズ

1
Last updated at Posted at 2026-04-27

はじめに

OracleDB で使用できるベクトル索引には、Hierarchical Navigable Small World (HNSW) に基づいたインメモリ近傍グラフ・ベクトル索引と、Inverted File Flat (IVF) に基づいた近傍パーティション・ベクトル索引の 2種類があります。

↑の資料を読み進めていくとインメモリ近傍グラフ・ベクトルは「索引作成コストがやや大きい」との記載があり、「作成に時間がかかるということ?」とハテナになったので、計測してみます。

手順・前提

下記の手順をインメモリ近傍グラフ・ベクトル索引と近傍パーティション・ベクトル索引で 3セットずつ実施します。ついでに索引サイズも計測します (⑤ - ③)。
環境は Oracle Autonomous AI Database Always Free です。

① 4,096次元のベクトル型の列を持つテーブルを作成
② 1,000件のベクトルデータを INSERT
③ USER_SEGMENTS を集計
④ ベクトル索引を作成 (所要時間を計測)
⑤ USER_SEGMENTS を集計
⑥ ベクトル索引を削除
⑦ ②に戻る (終了条件:ベクトルデータが 10,000件)

参考:①
CREATE TABLE testtab_hnsw3 (
  vec VECTOR(4096, FLOAT32) NOT NULL
);
参考:②
INSERT /*+ APPEND */ INTO testtab_hnsw3 (vec)
SELECT v.vec
FROM (
  SELECT LEVEL AS rn
  FROM dual
  CONNECT BY LEVEL <= 1000
) t
CROSS APPLY (
  SELECT TO_VECTOR(
           JSON_ARRAYAGG(val ORDER BY dim RETURNING CLOB),
           4096,
           FLOAT32
         ) AS vec
  FROM (
    SELECT LEVEL AS dim,
           ROUND(DBMS_RANDOM.VALUE(0, 1) + 0 * t.rn, 6) AS val
    FROM dual
    CONNECT BY LEVEL <= 4096
  )
) v;
参考:④
--近傍パーティション・ベクトル索引の場合は organization の後を neighbor partitions に変更
create vector index testtab_hnsw3_vec_idx on testtab_hnsw3(vec)
organization inmemory neighbor graph;

結果

作成所要時間

下表の通りとなりました。

データ件数 HNSW #1 HNSW #2 HNSW #3 IVF #1 IVF #2 IVF #3
1,000件 00:00.54 00:00.56 00:00.53 00:04.97 00:05.88 00:06.21
2,000件 00:03.32 00:03.04 00:03.32 00:08.67 00:08.82 00:09.23
3,000件 00:07.50 00:07.45 00:07.63 00:12.46 00:12.37 00:12.62
4,000件 00:13.41 00:13.83 00:13.10 00:15.32 00:15.95 00:15.25
5,000件 00:20.87 00:20.12 00:19.94 00:18.73 00:19.63 00:17.93
6,000件 00:30.17 00:29.84 00:29.54 00:29.15 00:25.13 00:23.31
7,000件 00:39.51 00:40.29 00:38.52 00:52.67 00:26.80 00:32.57
8,000件 00:49.22 00:51.25 00:51.10 00:31.05 00:30.81 00:40.27
9,000件 01:00.65 01:03.74 01:01.72 00:57.63 00:31.36 00:34.17
10,000件 01:13.93 01:18.17 01:15.20 00:35.17 00:33.67 00:36.50

グラフにすると下図の通り。インメモリ近傍グラフ・ベクトル索引と比較して、近傍パーティション・ベクトル索引は傾きが緩やかであることがわかります。

作成所要時間.png

サイズ (MB)

下表の通りとなりました。

データ件数 HNSW #1 HNSW #2 HNSW #3 IVF #1 IVF #2 IVF #3
1,000件 16.3 16.3 16.3 251.3 299.4 323.4
2,000件 18.8 18.8 18.8 447.6 438.7 464.1
3,000件 19.8 19.8 19.8 605.6 591.6 591.6
4,000件 18.8 18.9 18.8 770.8 802.7 705.3
5,000件 18.9 19.9 19.8 903.6 887.6 958.6
6,000件 19.9 19.9 19.8 1201.4 1182.3 1163.3
7,000件 19.9 21.0 20.9 1311.9 1283.8 1302.9
8,000件 20.0 20.0 21.0 1407.5 1384.4 1484.9
9,000件 21.0 34.0 21.0 1459.8 1449.8 1577.5
10,000件 21.1 21.1 22.1 1569.4 1558.3 1745.4

グラフにすると下図の通り。インメモリ近傍グラフ・ベクトル索引と比較して、近傍パーティション・ベクトル索引は 10倍以上大きくなることがわかります。

サイズ (MB).png

要件・制約を整理して、より適切なベクトル索引を作成・使用しましょう:book:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?