在 UNWIND 子句中使用扁平化映射而非嵌套映射 - Amazon Neptune

在 UNWIND 子句中使用扁平化映射而非嵌套映射

深层嵌套结构可能会限制查询引擎生成最佳查询计划的能力。为了部分缓解此问题,以下定义的模式将针对以下场景创建最佳计划:

  • 场景 1:使用包含 NUMBER、STRING 和 BOOLEAN 的 Cypher 字面量列表的 UNWIND 子句。

  • 场景 2:使用扁平化映射列表的 UNWIND 子句,其中仅包含 Cypher 字面量(NUMBER、STRING、BOOLEAN)作为值。

在编写包含 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"}} ] }