UNWIND 句でネストされたマップの代わりにフラット化されたマップを使用する
ディープネスト構造によって、クエリエンジンが最適なクエリプランを生成する機能が制限される可能性があります。この問題を部分的に軽減するために、以下の定義されたパターンにより、以下のシナリオに対して最適なプランが作成されます。
-
シナリオ 1: NUMBER、STRING、BOOLEAN を含む Cypher リテラルのリストで UNWIND を使用する。
-
シナリオ 2: Cypher リテラル (NUMBER、STRING、BOOLEAN) のみを含む、フラット化されたマップのリストで UNWIND を使用する。
UNWIND 句を含むクエリを記述する場合は、上記の推奨事項を使用してパフォーマンスを向上させます。
シナリオ 1 の例:
UNWIND $ids as x MATCH(t:ticket {`~id`: x})
パラメータの入力例:
parameters={ "ids": [1, 2, 3] }
シナリオ 2 の例は、CREATE または MERGE を行うノードのリストを生成することです。複数のステートメントを発行する代わりに、次のパターンを使用してプロパティをフラット化されたマップのセットとして定義します。
UNWIND $props as p CREATE(t:ticket {title: p.title, severity:p.severity})
パラメータの入力例:
parameters={ "props": [ {"title": "food poisoning", "severity": "2"}, {"title": "Simone is in office", "severity": "3"} ] }
次のようなネストされたノードオブジェクトは推奨しません。
UNWIND $nodes as n CREATE(t:ticket n.properties)
パラメータの入力例:
parameters={ "nodes": [ {"id": "ticket1", "properties": {"title": "food poisoning", "severity": "2"}}, {"id": "ticket2", "properties": {"title": "Simone is in office", "severity": "3"}} ] }