Performance Neo4j Cypher中的匹配边缘非常慢

Performance Neo4j Cypher中的匹配边缘非常慢,performance,neo4j,cypher,Performance,Neo4j,Cypher,我有一个数据库,有500K个节点和700K个关系。我创建了500个额外的关系,新类型为DummyEdge,属性从“1”到“500”。现在我想查询和修改这些关系。运行查询 MATCH()-[e:DummyEdge{edge_id:“123”}]->()SET e.property=“value”非常慢,大约需要300毫秒,因此如果我运行500个这样的查询,大约需要2-3分钟。我还调用了createindex ON:DummyEdge(edge_id),但它没有加快查询的执行速度 有没有办法加快批量

我有一个数据库,有500K个节点和700K个关系。我创建了500个额外的关系,新类型为
DummyEdge
,属性从“1”到“500”。现在我想查询和修改这些关系。运行查询
MATCH()-[e:DummyEdge{edge_id:“123”}]->()SET e.property=“value”
非常慢,大约需要300毫秒,因此如果我运行500个这样的查询,大约需要2-3分钟。我还调用了
createindex ON:DummyEdge(edge_id)
,但它没有加快查询的执行速度

有没有办法加快批量关系修改的速度?

节点创建一个索引,因此这样的索引对查询的性能没有影响

由于您的
匹配
模式,
()-[e:dummeyedge{edge_id:“123”}]->()
没有提供有关结束节点的信息,因此neo4j必须扫描数据库中的每个关系以找到您想要的关系。这就是为什么您的查询如此缓慢

如果(如@MichaelHunger所述)您的查询为
匹配模式中的任一节点提供有用的信息(如标签或索引标签/属性对),则效率会更高。这将有助于neo4j缩小需要扫描的关系数量。例如,让我们声明开始节点必须具有
Foo
标签:

MATCH (:Foo)-[e:DummyEdge {edge_id:"123"}]->()
SET e.property="value"
通过上述查询,neo4j只需查看
Foo
节点的传出关系,这要快得多,因为neo4j可以快速找到具有给定标签(或索引)的节点


现在,neo4j还支持,它确实支持关系索引。但是,这些类型的索引需要您付出更大的努力,对于您的用例来说可能是多余的。

如果您添加开始或结束标签,速度会更快。谢谢!
DummyEdge
关系的数量很小,只扫描这些关系会很快,但我猜Neo4j仍在扫描所有关系?