本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在可变长度路径 (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 表达式的左侧。