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>
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>