我使用的是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)
答案 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)