詳細な関係名を使用してノードラベルの冗長チェックを回避する - Amazon Neptune

詳細な関係名を使用してノードラベルの冗長チェックを回避する

パフォーマンスを最適化する場合、ノードパターン専用のリレーションシップラベルを使用すると、ノードのラベルフィルタリングを削除できます。2 つの person ノード間の関係を定義するために、関係 likes のみが使用されるグラフモデルを考えてみましょう。このパターンを見つけるために、次のクエリを記述できます。

MATCH (n:person)-[:likes]->(m:person) RETURN n, m

n と m の person ラベルチェックは冗長です。これは、どちらもタイプ person の場合にのみ表示されるように関係を定義しているためです。パフォーマンスを最適化するために、次のようにクエリを記述できます。

MATCH (n)-[:likes]->(m) RETURN n, m

このパターンは、プロパティが 1 つのノードラベルに排他的である場合にも適用できます。person ノードのみがプロパティ email を持っていると仮定します。したがって、ノードラベルの person との一致の検証は冗長です。このクエリを

MATCH (n:person) WHERE n.email = 'xxx@gmail.com' RETURN n

のように記述するよりも、次のように記述するほうが効率的です。

MATCH (n) WHERE n.email = 'xxx@gmail.com' RETURN n

このパターンは、パフォーマンスが重要で、モデリングプロセスでこれらのエッジラベルが他のノードラベルを含むパターンに再利用されないことを確認するチェックがある場合にのみ採用する必要があります。company などの別のノードラベルに後で email プロパティを導入する場合、これらの 2 つのバージョンのクエリでは結果が異なります。