Neo4j:放松状态下的慢匹配

2wnc66cl  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(110)

我试图通过展开然后合并来读入一行数据(不是从csv而是作为参数传递的)。看起来展开下查询的匹配部分花费了很长时间(而简单的创建或多或少是即时的)。我有点困惑,因为匹配应该运行得相当快,因为它可以首先索引标签。
下面是我的查询的一个最小版本(在真实的生活中,输入的数据比ID多):

WITH *, timestamp() as time0
WITH * UNWIND range(0, 9000) as unwound_data0
MERGE (node0:Node {id: unwound_data0}) ON CREATE SET node0.dbcreated = time0
WITH time0, collect(node0) as nodes0
RETURN time0

如果我把它简化为

UNWIND range(0, 9000) as unwound_data0
MATCH (node0: Node)
RETURN node0

它需要同样长的时间。但是如果我改变匹配来创建,那么它会非常快。
有没有办法加快进度?

9gm1akwq

9gm1akwq1#

我想我会提供一个稍微更详细的答案给任何登陆这里的人。为了加快速度,你可能需要为你试图匹配的id属性创建一个索引。
您可以使用以下命令在Cypher中创建索引:

CREATE INDEX index_name
FOR (a:LabelName)
ON (a.propertyName)
  • 将index_name、LabelName和propertyName设置为与您相关的值。*

如果要合并/匹配的属性是唯一的,则可以使用以下命令创建密码约束:

CREATE CONSTRAINT constraint_name
ON (a:LabelName)
ASSERT a.id_property IS UNIQUE

在感兴趣的属性上创建约束将创建一个索引,该索引将在查找操作期间使用。它还确保属性是唯一的,如果尝试创建具有相同属性值的节点,则会引发错误。

相关问题