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?

インメモリ近傍グラフベクトルで M と efConstruction の指定

1
Last updated at Posted at 2026-06-23

HNSW の原理的なパラメータである M と efConstruction は、インメモリ近傍グラフベクトルでも指定可能です。

HNSW固有パラメータ
NEIGHBORSとMは同等であり、ベクトルが任意のレイヤーに保持できる近傍の最大数を表します。最後の頂点には、最大200万の近傍を持つことができる柔軟性が1つ追加されます。
EFCONSTRUCTIONは、挿入時に検索の各ステップで考慮される最も近いベクトル候補の最大数を表します。
HNSWベクトル索引パラメータの有効な範囲は次のとおりです。
ACCURACY: > 0および<= 100
DISTANCE: EUCLIDEAN、L2_SQUARED (別名EUCLIDEAN_SQUARED)、COSINE、DOT、MANHATTAN、HAMMING
DISTANCE metric_nameを指定しなかった場合は、デフォルトのメトリックCOSINEが使用されます。
TYPE : HNSW
NEIGHBORS: >= 2および<= 2048
EFCONSTRUCTION: > 0および<= 65535

M と efConstruction はorganization inmemory neighbor graphの後にparametersを宣言して指定します。

テーブル情報確認
SQL> info testtab1
TABLE: TESTTAB1
         LAST ANALYZED:2026-06-22 07:46:12.0
         ROWS         :2500
         SAMPLE SIZE  :2500
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME         DATA TYPE           NULL  DEFAULT    COMMENTS
 VEC         VECTOR(*,*,DENSE)   Yes


SQL> info testtab2
TABLE: TESTTAB2
         LAST ANALYZED:2026-06-22 07:46:12.0
         ROWS         :2500
         SAMPLE SIZE  :2500
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME         DATA TYPE           NULL  DEFAULT    COMMENTS
 VEC         VECTOR(*,*,DENSE)   Yes


SQL> info testtab3
TABLE: TESTTAB3
         LAST ANALYZED:2026-06-22 07:46:12.0
         ROWS         :2500
         SAMPLE SIZE  :2500
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME         DATA TYPE           NULL  DEFAULT    COMMENTS
 VEC         VECTOR(*,*,DENSE)   Yes


SQL> info testtab4
TABLE: TESTTAB4
         LAST ANALYZED:2026-06-22 07:46:11.0
         ROWS         :2500
         SAMPLE SIZE  :2500
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME         DATA TYPE           NULL  DEFAULT    COMMENTS
 VEC         VECTOR(*,*,DENSE)   Yes


SQL>
索引作成
SQL> create vector index testtab1_idx on testtab1(vec) organization inmemory neighbor graph;

Vector INDEX created.

Elapsed: 00:00:04.949
SQL>
SQL>
SQL> create vector index testtab2_idx on testtab2(vec) organization inmemory neighbor graph
  2* parameters (type hnsw, M 64); 

Vector INDEX created.

Elapsed: 00:00:04.602
SQL> create vector index testtab3_idx on testtab3(vec) organization inmemory neighbor graph
  2* parameters (type hnsw, efconstruction 400); 

Vector INDEX created.

Elapsed: 00:00:06.030
SQL> create vector index testtab4_idx on testtab4(vec) organization inmemory neighbor graph
  2* parameters (type hnsw, m 64, efconstruction 400); 

Vector INDEX created.

Elapsed: 00:00:06.000
SQL>

それぞれの値は v$vector_graph_index の NUM_NEIGHBORS列と EF_CONSTRUCTION列から確認可能です。

SQL> select * from v$vector_graph_index order by index_name;
                                                                                                                                                                                     
OWNER    INDEX_NAME      PARTITION_NAME       INDEX_OBJN ANCHOR_ADDRESS      INDEX_GRAPH_TYPE       NUM_LAYERS    NUM_VECTORS    SPARSE_LAYER_VECTORS    NUM_NEIGHBORS    EF_CONSTRUCTION    TOTAL_EDGES    REF_COUNT    QUERY_DIST_COUNT    CREATION_DIST_COUNT    PRUNED_NEIGHBORS    NUM_SNAPSHOTS    MAX_SNAPSHOT    ALLOCATED_BYTES    USED_BYTES    INDEX_USED_COUNT COVERING_COLS    QUANTIZATION_TYPE    QUANTIZATION_MDATA       CON_ID
________ _______________ _________________ _____________ ___________________ ___________________ _____________ ______________ _______________________ ________________ __________________ ______________ ____________ ___________________ ______________________ ___________________ ________________ _______________ __________________ _____________ ___________________ ________________ ____________________ _____________________ _________
ADMIN    TESTTAB1_IDX                             200455 00000035C3FC8A40    HNSW                            1           2500                       0               32                200         104422            1                   0                3450718              438665                1               1           43122688      42320840                   0                  FULL PRECISION       {}                          245
ADMIN    TESTTAB2_IDX                             200473 00000035C4018A40    HNSW                            1           2500                       0               64                200         121715            1                   0                3487154              423007                1               1           44171264      42961608                   0                  FULL PRECISION       {}                          245
ADMIN    TESTTAB3_IDX                             200491 00000035C4068A40    HNSW                            1           2500                       0               32                400         105137            1                   0                3520271              877663                1               1           43122688      42320840                   0                  FULL PRECISION       {}                          245
ADMIN    TESTTAB4_IDX                             200509 00000035C40B8A40    HNSW                            1           2500                       0               64                400         129999            1                   0                3519212              858701                1               1           44171264      42961608                   0                  FULL PRECISION       {}                          245

Elapsed: 00:00:00.020
SQL>

公式の記載は見つけることができませんでしたが、デフォルト値は M が32、efConstruction は 200 のようです。

テーブル情報確認~パラメータ確認
SQL> info testtab5
TABLE: TESTTAB5
         LAST ANALYZED:2026-06-22 07:58:48.0
         ROWS         :100
         SAMPLE SIZE  :100
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME         DATA TYPE           NULL  DEFAULT    COMMENTS
 VEC         VECTOR(*,*,DENSE)   Yes


SQL> info testtab6
TABLE: TESTTAB6
         LAST ANALYZED:2026-06-22 07:58:47.0
         ROWS         :10000
         SAMPLE SIZE  :10000
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME         DATA TYPE           NULL  DEFAULT    COMMENTS
 VEC         VECTOR(*,*,DENSE)   Yes


SQL> info testtab7
TABLE: TESTTAB7
         LAST ANALYZED:2026-06-22 07:58:47.0
         ROWS         :2500
         SAMPLE SIZE  :2500
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME         DATA TYPE           NULL  DEFAULT    COMMENTS
 VEC         VECTOR(*,*,DENSE)   Yes


SQL> select distinct(vector_dimension_count(vec)) from testtab5;

   (VECTOR_DIMENSION_COUNT(VEC))
________________________________
                            4096

Elapsed: 00:00:00.039
SQL> select distinct(vector_dimension_count(vec)) from testtab6;

   (VECTOR_DIMENSION_COUNT(VEC))
________________________________
                            4096

Elapsed: 00:00:00.073
SQL> select distinct(vector_dimension_count(vec)) from testtab7;

   (VECTOR_DIMENSION_COUNT(VEC))
________________________________
                            2048

Elapsed: 00:00:00.034
SQL> select distinct(vector_dimension_format(vec)) from testtab5;

(VECTOR_DIMENSION_FORMAT(VEC))
_________________________________
FLOAT32

Elapsed: 00:00:00.029
SQL> select distinct(vector_dimension_format(vec)) from testtab6;

(VECTOR_DIMENSION_FORMAT(VEC))
_________________________________
FLOAT32

Elapsed: 00:00:00.066
SQL> select distinct(vector_dimension_format(vec)) from testtab7;

(VECTOR_DIMENSION_FORMAT(VEC))
_________________________________
FLOAT32

Elapsed: 00:00:00.039
SQL>
SQL> create vector index testtab5_idx on testtab5(vec) organization inmemory neighbor graph;

Vector INDEX created.

Elapsed: 00:00:00.458
SQL> create vector index testtab6_idx on testtab6(vec) organization inmemory neighbor graph;

Vector INDEX created.

Elapsed: 00:01:17.509
SQL> create vector index testtab7_idx on testtab7(vec) organization inmemory neighbor graph;

Vector INDEX created.

Elapsed: 00:00:02.852
SQL>
SQL> select * from v$vector_graph_index order by index_name;
                                                                                                                                                                                     
OWNER    INDEX_NAME      PARTITION_NAME       INDEX_OBJN ANCHOR_ADDRESS      INDEX_GRAPH_TYPE       NUM_LAYERS    NUM_VECTORS    SPARSE_LAYER_VECTORS    NUM_NEIGHBORS    EF_CONSTRUCTION    TOTAL_EDGES    REF_COUNT    QUERY_DIST_COUNT    CREATION_DIST_COUNT    PRUNED_NEIGHBORS    NUM_SNAPSHOTS    MAX_SNAPSHOT    ALLOCATED_BYTES    USED_BYTES    INDEX_USED_COUNT COVERING_COLS    QUANTIZATION_TYPE    QUANTIZATION_MDATA       CON_ID
________ _______________ _________________ _____________ ___________________ ___________________ _____________ ______________ _______________________ ________________ __________________ ______________ ____________ ___________________ ______________________ ___________________ ________________ _______________ __________________ _____________ ___________________ ________________ ____________________ _____________________ _________
ADMIN    TESTTAB1_IDX                             200455 00000035C3FC8A40    HNSW                            1           2500                       0               32                200         104422            1                   0                3870842              438665                1               2           43122688      42320840                   0                  FULL PRECISION       {}                          245
ADMIN    TESTTAB2_IDX                             200473 00000035C4018A40    HNSW                            1           2500                       0               64                200         121715            1                   0                3896273              423007                1               2           44171264      42961608                   0                  FULL PRECISION       {}                          245
ADMIN    TESTTAB3_IDX                             200491 00000035C4068A40    HNSW                            1           2500                       0               32                400         105137            1                   0                3927902              877663                1               1           43122688      42320840                   0                  FULL PRECISION       {}                          245
ADMIN    TESTTAB4_IDX                             200509 00000035C40B8A40    HNSW                            1           2500                       0               64                400         129999            1                   0                3917188              858701                1               1           44171264      42961608                   0                  FULL PRECISION       {}                          245
ADMIN    TESTTAB5_IDX                             200538 00000035C4108A40    HNSW                            0            100                       0               32                200              0            1                   0                      0                   0                1               1            2228224       1736296                   0                  FULL PRECISION       {}                          245
ADMIN    TESTTAB6_IDX                             200556 00000035C4158A40    HNSW                            2          10000                     312               32                200         473601            1                   0               37341227             1870534                1               1          173408256     170356376                   0                  FULL PRECISION       {}                          245
ADMIN    TESTTAB7_IDX                             200574 00000035C41E8A40    HNSW                            1           2500                       0               32                200         104287            1                   0                3442568              438950                1               1           22151168      21349000                   0                  FULL PRECISION       {}                          245

7 rows selected.

Elapsed: 00:00:00.018
SQL>

efConstruction の増減による、索引作成時間の変化も確認することができました。

テーブル情報確認
SQL> info testtab8
TABLE: TESTTAB8
         LAST ANALYZED:2026-06-22 08:17:35.0
         ROWS         :10000
         SAMPLE SIZE  :10000
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME         DATA TYPE           NULL  DEFAULT    COMMENTS
 VEC         VECTOR(*,*,DENSE)   Yes


SQL> info testtab9
TABLE: TESTTAB9
         LAST ANALYZED:2026-06-22 08:17:35.0
         ROWS         :10000
         SAMPLE SIZE  :10000
         INMEMORY     :DISABLED
         COMMENTS     :

Columns
NAME         DATA TYPE           NULL  DEFAULT    COMMENTS
 VEC         VECTOR(*,*,DENSE)   Yes


SQL> select distinct(vector_dimension_count(vec)) from testtab8;

   (VECTOR_DIMENSION_COUNT(VEC))
________________________________
                            4096

Elapsed: 00:00:00.079
SQL> select distinct(vector_dimension_count(vec)) from testtab9;

   (VECTOR_DIMENSION_COUNT(VEC))
________________________________
                            4096

Elapsed: 00:00:00.075
SQL> select distinct(vector_dimension_format(vec)) from testtab8;

(VECTOR_DIMENSION_FORMAT(VEC))
_________________________________
FLOAT32

Elapsed: 00:00:00.074
SQL> select distinct(vector_dimension_format(vec)) from testtab9;

(VECTOR_DIMENSION_FORMAT(VEC))
_________________________________
FLOAT32

Elapsed: 00:00:00.071
SQL>
efConstruction を変えて索引作成
SQL> create vector index testtab8_idx on testtab8(vec) organization inmemory neighbor graph
  2* parameters (type hnsw, efconstruction 100);

Vector INDEX created.

Elapsed: 00:01:00.196 
SQL> create vector index testtab9_idx on testtab9(vec) organization inmemory neighbor graph
  2* parameters (type hnsw, efconstruction 1000);

Vector INDEX created.

Elapsed: 00:01:36.125 
SQL> select * from v$vector_graph_index order by index_name;

OWNER    INDEX_NAME      PARTITION_NAME       INDEX_OBJN ANCHOR_ADDRESS      INDEX_GRAPH_TYPE       NUM_LAYERS    NUM_VECTORS    SPARSE_LAYER_VECTORS    NUM_NEIGHBORS    EF_CONSTRUCTION    TOTAL_EDGES    REF_COUNT    QUERY_DIST_COUNT    CREATION_DIST_COUNT    PRUNED_NEIGHBORS    NUM_SNAPSHOTS    MAX_SNAPSHOT    ALLOCATED_BYTES    USED_BYTES    INDEX_USED_COUNT COVERING_COLS    QUANTIZATION_TYPE    QUANTIZATION_MDATA       CON_ID
________ _______________ _________________ _____________ ___________________ ___________________ _____________ ______________ _______________________ ________________ __________________ ______________ ____________ ___________________ ______________________ ___________________ ________________ _______________ __________________ _____________ ___________________ ________________ ____________________ _____________________ _________
ADMIN    TESTTAB8_IDX                             200600 00000035C3FC8A40    HNSW                            2          10000                     312               32                100         400939            1                   0               28919174              890824                1               1          173408256     170356376                   0                  FULL PRECISION       {}                          245
ADMIN    TESTTAB9_IDX                             200627 00000035C4058A40    HNSW                            2          10000                     312               32               1000         509030            1                   0               52565728             9379192                1               1          173408256     170356376                   0                  FULL PRECISION       {}                          245

Elapsed: 00:00:00.011
SQL>
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?