所以我正在生成一个相当大的 Neo4J 实例,我正在使用 LOAD_CSV 加载它。我已经阅读了尽可能多的关于优化查询以从查询计划中删除 Eager 读取的博客,但是我遇到了一个我无法解释的示例。
假设我们有两种类型的节点,A 和 B。每一种都有一个唯一的属性,名称,并对其有一个约束:
CREATE CONSTRAINT ON (a:A) ASSERT a.name IS UNIQUE
CREATE CONSTRAINT ON (b:B) ASSERT b.name IS UNIQUE
现在,如果我们希望在任一类型的节点之间创建关系,如下所示:
MERGE (a:A {name:1})
MERGE (b:B {name:2})
MERGE (a)-[:REL]->(b)
我们的查询计划完全没有急于求成。
但是,如果我们想在 2 个相同类型的节点之间创建关系:
MERGE (a:A {name:1})
MERGE (b:A {name:2})
MERGE (a)-[:REL]->(b)
个人资料回来了,里面有热切的阅读!
我们可以通过将两个节点合并更改为匹配来消除这种渴望,但这为我们打开了不创建我们想要创建的关系的可能性!
我的问题是为什么会发生这种在同一标签的两个节点之间创建关系的特定情况?
我在 Neo 2.3.2 上发现了这一点。