MATCH (t1:Tel {TB:true})<-[:TelBIZ]-
(:ACC {TB:true})-[or:REBIZ {movOre:t1.nuTel}]->
(:ACC {TB:true})-[:TelBIZ]->(t2:Tel {TB:true,nuTel:or.movBene})
WHERE t1.nuTel<>t2.nuTel
RETURN t1, t2, COUNT(or) AS Ope, SUM(or.imp) AS Total,
10^3 as Precision, max(or.Txt) AS mRB
字符串
我试图让这个查询返回几个值,但我发现查询没有优化,返回了很多数据。请建议我如何优化它。我使用Neo4j v3.5。
1条答案
按热度按时间a1o7rhls1#
我看到的一件事是,你有一个长模式,在这个模式中,你有一个条件,它使用了这个模式中节点的属性。
也就是说,您在t1上匹配并需要
{movOre: t1.nutel}
,当您使用REBIX关系属性在t2: Tel
上过滤时,同样的事情也发生了这意味着必须找到每个t1,以及模式中使用的每个
t1.nuTel
值。如果您有1000个Tel节点,则您有1000个nuTel属性。基本上,nuTel和movBene的可能性正在爆炸。您可以重构以将其拆分为多个MATCH语句:
字符串
对于你的图来说,这可能不是最好的解决方案,而且当
or.movBene
是模式的一部分时,它仍然存在被用作过滤器的问题,但希望我已经传达了这个想法,你可以从中改进。此外,nuTel、movBene和TB上的索引将非常快,如果您还没有哈弗的话。