Neo4j花了一分多钟才完成查询

时间:2017-02-04 05:18:19

标签: neo4j

我使用的是neo4j 3.0.3版。我已经为100 000个数据执行了以下查询。执行时间超过一分钟。如何缩短执行时间?

MATCH (c:Consumer)-[:HAS_VISITED_LOCATION]-(l:Location) 
WHERE l.AreaName="hyderabad" OR l.AreaName="kanpur"  
WITH l 
MATCH(d:Consumer) 
WHERE NOT (d)-[:HAS_VISITED_LOCATION]-(l) 
RETURN COUNT(DISTINCT d.MID)

2 个答案:

答案 0 :(得分:0)

添加替代方法。由于您只需要计数:未访问过任何一个位置的消费者,我们可以获取该位置的消费者数量,并从以下总数中减去:消费者。

MATCH (c:Consumer)
WITH COUNT(c) as consumerCnt
MATCH (c:Consumer)-[:HAS_VISITED_LOCATION]->(l:Location)
WHERE l.AreaName="hyderabad" OR l.AreaName="kanpur"
RETURN COUNT(DISTINCT c) - consumerCnt as count

编辑,我们首先得到所有客户的数量。 Neo4j在执行查询时应用NodeCountFromStore操作时有点挑剔,所以在开头放置它应该保证这种方法,而不是选择不同的方法。

答案 1 :(得分:-1)

所有从未访问坎普尔或海德拉巴的消费者

MATCH (d:Consumer)-[:HAS_VISITED_LOCATION]->(l:Location)
WHERE (l.AreaName<>"hyderabad" AND l.AreaName<>"kanpur")
RETURN COUNT(d.MID)
相关问题