ページの先頭行へ戻る
Enterprise Postgres 17 SP1 知識データ管理機能 利用ガイド

4.8 グラフ検索のパフォーマンスチューニング

グラフデータは内部的には複数のテーブルとして格納されます。グラフデータの探索は、それらのテーブルに対するSELECT文として実現されています。そのアクセスプランは通常のSQL文と同じようにEXPLAIN文で確認することができます。

グラフデータは、ノードごとのレコードを持つテーブルと、エッジごとのレコードを持つテーブルで構成され、グラフデータに対応する問合せは、それらのテーブルの結合とフィルタリングによって実現されています。そのためグラフ探索の性能問題に対するアプローチは、結合を含むSELECT文に対するものと同じになります。

例) グラフ探索のアクセスプランを確認する例

SELECT * FROM cypher('new_graph', $$
EXPLAIN (COSTS off) MATCH (:Person {name: 'Daedalus'})-[:FATHER_OF]->(person)
WITH person.name AS name ORDER BY person.name RETURN name
$$) AS (v agtype);
 QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Sort
 Sort Key: (agtype_access_operator(VARIADIC ARRAY[_agtype_build_vertex(person.id, _label_name('25995'::oid, person.id), person.properties), '"name"'::agtype]))
 -> Hash Join
 Hash Cond: (person.id = _age_default_alias_1.end_id)
 -> Append
 -> Seq Scan on _ag_label_vertex person_1
 -> Seq Scan on "Person" person_2
 -> Hash
 -> Hash Join
 Hash Cond: (_age_default_alias_1.start_id = _age_default_alias_0.id)
 -> Seq Scan on "FATHER_OF" _age_default_alias_1
 -> Hash
 -> Seq Scan on "Person" _age_default_alias_0
 Filter: (properties @> '{"name": "Daedalus"}'::agtype)
(14 rows)