首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Neo4j Cypher中的匹配边缘非常慢

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

Stack Overflow用户
提问于 2020-01-07 16:50:47
回答 2查看 301关注 0票数 0

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

有没有办法使这种大规模的关系修改更快?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-07 18:29:11

创建索引节点创建索引,因此这样的索引不会影响查询的性能。

由于您的MATCH模式()-[e:DummyEdge {edge_id:"123"}]->()没有提供关于终端节点的信息,所以neo4j必须扫描DB中的每个关系才能找到所需的关系。这就是您的查询速度如此慢的原因。

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

代码语言:javascript
运行
复制
MATCH (:Foo)-[e:DummyEdge {edge_id:"123"}]->()
SET e.property="value"

使用上面的查询,neo4j只需要查看Foo节点的传出关系,这要快得多,因为neo4j可以快速找到具有给定标签(或索引)的节点。

现在,neo4j还支持https://neo4j.com/docs/cypher-manual/current/schema/index/#schema-index-fulltext-search,后者支持关系索引。然而,这些类型的索引需要您付出更多的努力,并且可能会对用例造成太大的损失。

票数 1
EN

Stack Overflow用户

发布于 2022-04-27 08:56:01

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59632750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档