我有一个查询
MATCH (x:NodeA)-[]-(y:NodeB)-[]-(z:NodeC)
RETURN DISTINCT z.property.
节点x和节点z有很多实例,但只有少数节点y,这意味着许多路径在y处通过同一节点。
有没有办法简化查询,从而减少neo检查的路径数量,因为我不关心最终z节点来自哪个x节点?
该查询目前有大约2.8亿个路径,但y处只有约50个节点。
答案 0 :(得分:1)
由于您实际上并不关心NodeA
,因此只需找到NodeB
- NodeC
对,其中NodeB
与任何NodeA
相关联。否则,您的结果会乘以NodeA
s的数量(在DISTINCT
过滤掉之前):
MATCH (y:NodeB)-[]-(z:NodeC)
WHERE (:NodeA)-[]-(y)
RETURN DISTINCT z.property
答案 1 :(得分:1)
替代Tezra的Cypher,您可以使用如下查询:
MATCH (z:NodeC)
WHERE (:NodeA)-[]-(:NodeB)-[]-(z)
RETURN z.property
这里的主要优点是您不需要使用DISTINCT
。但是,使用PROFILE查看每个查询的执行计划并选择最适合您的模式的计划非常重要。