在可变长度路径 (VLP) 表达式中将限制性更强的节点放在左侧 - Amazon Neptune

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

在可变长度路径 (VLP) 表达式中将限制性更强的节点放在左侧

在可变长度路径 (VLP) 查询中,查询引擎通过选择在表达式的左侧或右侧开始遍历来优化评估。该决定基于左侧和右侧模式的基数。基数是与指定模式匹配的节点数。

  • 如果右侧模式的基数为 1,则右侧将是起点。

  • 如果左侧和右侧的基数均为 1,则检查两边的扩展并从较小的扩展侧开始。扩展是 VLP 表达式中左侧节点和右侧节点的传出或传入边的数量。仅当 VLP 关系为单向关系且提供了关系类型时,才使用优化的这一部分。

  • 否则,左侧将是起点。

对于 VLP 表达式链,此优化只能应用于第一个表达式。另一个 VLPs 从左侧开始评估。例如,假设 (a)、(b) 的基数为一,(c) 的基数大于一。

  • (a)-[*1..]->(c):评价从 (a) 开始。

  • (c)-[*1..]->(a):评价从 (a) 开始。

  • (a)-[*1..]-(c):评价从 (a) 开始。

  • (c)-[*1..]-(a):评价从 (a) 开始。

现在让 (a) 的传入边为二,(a) 的出边为三,(b) 的传入边为四,(b) 的出边为五。

  • (a)-[*1..]->(b): 评估从 (a) 开始,因为 (a) 的传出边缘小于 (b) 的传入边缘。

  • (a)<-[*1..]-(b): 评估从 (a) 开始,因为 (a) 的传入边缘小于 (b) 的传出边缘。

通常,将限制性更强的模式放在 VLP 表达式的左侧。