情况如下: 我有一个具有ContactId属性的节点,该属性设置为唯一且已编制索引。节点标签是:联系人 (节点:联系{ContactId:1})
我有另一个类似于Address模式的节点: (node2:Address {AddressId:1})
我现在尝试添加一个新节点(包括其他属性,包括ContactId(用于引用)) (node3:ContactAddress {AddressId:1,ContactId:1})
当我为每个节点运行合并命令时,添加包含在另一个节点类型中设置为唯一的属性的节点的时间似乎使进程慢得多。
ContactAddress节点仅包含Contact和Address节点之间的关系属性。 Contact和Address节点每个最多包含10个属性。这是一个错误,Neo4j检查属性键 - >价值 - >节点标签?
下面的代码和截图:
string strForEach = string.Format("(n in {
} |
MERGE (c:{1} {{{2} : n.{2}}}) SET c = n)", propKey, label, PK_Field);
var query = client
.Cypher
.ForEach(strForEach)
.WithParam(propKey, entities.ToList());
{{0}}
答案 0 :(得分:0)
约束检查比插入更昂贵。他们还对约束进行全局锁定以防止多次插入。
我看到你不使用参数,但字符串替换,我确实建议更改它并使用参数。
同样将整个节点c设置为n会再次触发约束检查。
您可能想要使用ON CREATE SET
MERGE
子句
(n in {nodes} |
MERGE (c:Label {key : n.key}}) ON CREATE SET c.foo = n.foo, c.bar = n.bar )