【发布时间】:2020-05-21 01:42:36
【问题描述】:
我创建了一个图表,其中包含有关电影以及作为剧组或演员在这些电影中工作过的人的信息。下面的查询应该找到至少有两部电影的导演,这些电影的发行日期相隔 X 年。
MATCH (p:Person)-[r1:CREW]->(m1:Movie), (p:Person)-[r2:CREW]->(m2:Movie)
WHERE r1.job = 'Director' AND r2.job = 'Director' AND m1.movie_id < m2.movie_id
AND ABS(duration.between(m1.release_date, m2.release_date).years) >= 50
RETURN DISTINCT p.id, p.name
LIMIT 1000000
最后的这个 LIMIT 使查询实际运行并且非常快。没有这个限制,执行需要很长时间,然后引发堆异常。请注意,如标题所述,返回的结果约为 40-50。对我来说,使用 LIMIT 运行得更快是没有意义的,因为它实际上并没有限制任何东西……或者是吗?任何帮助表示赞赏。
编辑:
我用的是neo4j 4.0.4 社区版
我的图表包含大约 400000 个节点和 120 万个关系。
【问题讨论】:
-
你的图表有多大?您还可以与 LIMIT 共享一个 PROFILE 执行和一个没有限制的 EXPLAIN 计划吗?
-
也请分享一下你使用的neo4j版本和版本
-
@MichaelHunger 你好。我已经按照您的要求编辑了我的问题。
-
团队还要求提供这些统计数据
curl -H accept:application/json -H content-type:application/json -d '{"statements":[{"statement":"CALL db.stats.retrieve(\"GRAPH COUNTS\")"}]}' http://_________:7474/db/data/transaction/commit > graphCounts.json