本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在查询中首选定向边缘而非双向边缘
当 Neptune 执行查询优化时,双向边缘会使创建最佳查询计划变得困难。次优计划要求引擎执行不必要的工作,从而导致性能降低。
因此,请尽可能使用定向边缘而不是双向边缘。例如,使用:
MATCH p=(:airport {code: 'ANC'})-[:route]->(d) RETURN p)
而不是:
MATCH p=(:airport {code: 'ANC'})-[:route]-(d) RETURN p)
大多数数据模型实际上不需要在两个方向上遍历边缘,因此,通过切换到使用定向边缘,查询可以显著提高性能。
如果您的数据模型确实需要遍历双向边缘,请将 MATCH
模式中的第一个节点(左侧)设置为筛选限制最严的节点。
例如,“为我找到往返 ANC
机场的所有 routes
”。编写这个查询以从 ANC
机场开始,如下所示:
MATCH p=(src:airport {code: 'ANC'})-[:route]-(d) RETURN p
引擎可以执行最少的工作量来满足查询,因为受限制最严的节点放置为模式中的第一个节点(左侧)。然后,引擎可以优化查询。
这比在模式末尾筛选 ANC
机场要好得多,如下所示:
MATCH p=(d)-[:route]-(src:airport {code: 'ANC'}) RETURN p
当受限制最严的节点没有放在模式中的首位时,引擎必须执行额外的工作,因为它无法优化查询,必须执行额外的查找才能得出结果。