如何提高 neo4j 中密码查询的速度?
How to increase the speed of cypher queries in neo4j?
我已经建立了一个有 14k 个节点和 15k 个关系的 Neo4J 数据库。当我 运行 这个查询时:
MATCH (n:RealNode {gid:'12'})<-[:contains*..4]->(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID
需要超过 5 秒才能得到响应。如果我将 4 更改为 10,则需要更多。
我附上了特定节点的节点和关系的屏幕截图:
我的n:RealNode是粉红色的,有CONTAINS关系的节点是灰色的
我的问题如下:
1)如何优化查询速度(索引除外)。
2) 如果我把所有的灰色节点都直接放在粉色节点下面,速度会不会有差别?
正如您所说 "apart from the indexes" 我假设您有一个正确的 :RealNode(gid) 架构索引
但是您的查询不会使用索引,因为您在整个模式上匹配(适用于 Neo4j<2.2M04)
您可以通过首先匹配您知道的部分来更好地拆分查询:
MATCH (n:RealNode {gid:'12'})
MATCH (n)-[:contains*..4]-(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID
另外我去掉了path中的箭头,两边不用设置,省略即可。
如果您仍然遇到性能问题,请分享您正在使用的版本、JAVA 堆设置,以及PROFILE neo4j 中查询的输出-shell
我已经建立了一个有 14k 个节点和 15k 个关系的 Neo4J 数据库。当我 运行 这个查询时:
MATCH (n:RealNode {gid:'12'})<-[:contains*..4]->(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID
需要超过 5 秒才能得到响应。如果我将 4 更改为 10,则需要更多。
我附上了特定节点的节点和关系的屏幕截图:
我的n:RealNode是粉红色的,有CONTAINS关系的节点是灰色的
我的问题如下: 1)如何优化查询速度(索引除外)。 2) 如果我把所有的灰色节点都直接放在粉色节点下面,速度会不会有差别?
正如您所说 "apart from the indexes" 我假设您有一个正确的 :RealNode(gid) 架构索引
但是您的查询不会使用索引,因为您在整个模式上匹配(适用于 Neo4j<2.2M04)
您可以通过首先匹配您知道的部分来更好地拆分查询:
MATCH (n:RealNode {gid:'12'})
MATCH (n)-[:contains*..4]-(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID
另外我去掉了path中的箭头,两边不用设置,省略即可。
如果您仍然遇到性能问题,请分享您正在使用的版本、JAVA 堆设置,以及PROFILE neo4j 中查询的输出-shell