我试图通过展开然后合并来读入一行数据(不是从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
它需要同样长的时间。但是如果我改变匹配来创建,那么它会非常快。
有没有办法加快进度?
1条答案
按热度按时间9gm1akwq1#
我想我会提供一个稍微更详细的答案给任何登陆这里的人。为了加快速度,你可能需要为你试图匹配的id属性创建一个索引。
您可以使用以下命令在Cypher中创建索引:
如果要合并/匹配的属性是唯一的,则可以使用以下命令创建密码约束:
在感兴趣的属性上创建约束将创建一个索引,该索引将在查找操作期间使用。它还确保属性是唯一的,如果尝试创建具有相同属性值的节点,则会引发错误。