Neo4j 显式指定非歧义类型的关系和节点是否可以改进密码查询?

Neo4j 显式指定非歧义类型的关系和节点是否可以改进密码查询?,neo4j,cypher,Neo4j,Cypher,假设类型A的节点只有一种传出关系,例如[:relType],并且仅与类型A的其他节点有传出关系 明确指定节点和关系的类型是否会改善查询及其响应时间 i、 e: 是一个查询,如 MATCH p=(:A)-[]->() RETURN p; 效率低于: MATCH p=(:A)-[:relType]->(:A) RETURN p; ?[更新] 通常,如果您知道只有一种可能的关系类型或节点标签,那么不在密码模式中指定它会更快。这是因为Cypher planner不会生成验证类型或标签的操

假设类型A的节点只有一种传出关系,例如[:relType],并且仅与类型A的其他节点有传出关系

明确指定节点和关系的类型是否会改善查询及其响应时间

i、 e:

是一个查询,如

MATCH p=(:A)-[]->() RETURN p;
效率低于:

MATCH p=(:A)-[:relType]->(:A) RETURN p;

[更新]

通常,如果您知道只有一种可能的关系类型或节点标签,那么不在密码模式中指定它会更快。这是因为Cypher planner不会生成验证类型或标签的操作

然而,正如@InverseFalcon的评论所指出的,有时密码规划者可能能够使用类型或标签作为提示,使其能够加速整个查询,尽管验证类型或标签的开销很大


两个版本的查询可能有助于决定使用哪一个。

也就是说,Neo4j确实收集统计信息,例如从某些节点标签到某些节点标签的类型关系计数。如果有许多来自:A节点的传出:relType关系,但很少有来自:A节点的传入:relType关系,那么拥有标签将让规划人员选择更具选择性的起点和扩展。