在查询中首选定向边缘而非双向边缘 - Amazon Neptune

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在查询中首选定向边缘而非双向边缘

当 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

当受限制最严的节点没有放在模式中的首位时,引擎必须执行额外的工作,因为它无法优化查询,必须执行额外的查找才能得出结果。