我在Neo4j(3.5)中有一个图形,其中包含大约12m个节点和16m个边。该图在具有8个vCPU内核和8gb内存的RHEL VM上运行。
在下图所示的图形上执行更新时,我看到更新大约需要15秒钟才能完成。
我已经查看了Neo4j索引建议,但找不到任何表明它将完全加快更新速度的内容。该图的模式显示我已经在match属性上创建了一个索引; :Liability(Liability ID) ONLINE
MATCH (n {`Liability ID`: {liability_id}})
SET n.`Creditor Reference`= {reference},
n.`Liability Type`= {liability_type},
n.`Liability Sub-Type`= {liability_subtype}
RETURN n.`Liability ID`
感谢您的帮助。
编辑:我还尝试过使用以下架构的约束替换索引::Liability(Liability ID) ONLINE (for uniqueness constraint)
,这没有加快更新速度,反而使更新速度慢了1秒。
答案 0 :(得分:3)
由于索引与 label 和属性名称相关联,因此要使用索引,您必须指定 label 和您的MATCH
模式中的属性名称。如果您未在模式中指定标签,则Cypher将被迫扫描所有节点,从而阻止其使用索引。
例如,这将使Cypher计划者生成使用您的索引的计划(唯一的实际更改是在MATCH
子句中):
MATCH (n:Liability {`Liability ID`: {liability_id}})
SET
n.`Creditor Reference` = {reference},
n.`Liability Type` = {liability_type},
n.`Liability Sub-Type` = {liability_subtype}
RETURN n.`Liability ID`;