如何在neo4j中提高cypher查询的速度?

时间:2015-02-20 09:37:15

标签: neo4j cypher

我建立了一个拥有14k节点和15k关系的Neo4J数据库。当我运行此查询时:

  MATCH (n:RealNode {gid:'12'})<-[:contains*..4]->(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID

获得回复需要5秒以上的时间。如果我将4改为10则需要更多。

我附上了特定节点的节点和关系的屏幕截图:

enter image description here

我的n:RealNode是粉红色的,具有CONTAINS关系的节点是灰色的。

我的问题如下: 1)如何优化查询的速度(除了索引)。 2)如果我直接在粉红色节点下有所有灰色节点,它会对速度产生影响吗?

1 个答案:

答案 0 :(得分:4)

如你所说&#34;除了索引&#34;我假设你有一个正确的模式索引:RealNode(gid)

但是你的查询不会使用索引,因为你对整个模式进行了匹配(对Neo4j&lt; 2.2M04有效)

您可以通过首先匹配您知道的部分来更好地拆分查询:

MATCH (n:RealNode {gid:'12'})
MATCH (n)-[:contains*..4]-(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID

此外,我从路径中删除了箭头,无需在两侧进行设置,只需省略它们。

如果您仍然遇到性能问题,请分享您正在使用的版本 JAVA堆设置以及查询的 PROFILE 输出的Neo4j - 壳