[英]Neo4j 3.5 Query Performance Issue
我在 neo4j(社区 3.5)中运行以下查询
MATCH (a:master_node:PERF:Application)-[r1]->(n:master_node:PERF)-[r:AFFINITY]->(m:master_node:PERF)<-[r2]-(a1:master_node:PERF:Application)
WHERE exists(n.latest_ingestion)
AND exists(m.latest_ingestion)
AND id(a) <> id(a1)
MERGE (a)<-[:APP_AFFINITY]-(a1)
我对 neo4j 的配置如下:
heap_size : 8GB
page_cache : 4GB
并且我在属性(名称)和以上查询上运行超过 100k 个节点的标签(应用程序)的索引。但是查询运行时间更长并且消耗了大量 memory。
请帮助我提高性能。
您没有在此查询中使用name
属性,因此您的索引将无济于事。 可能有帮助的唯一索引是:master_node(latest_ingestion)
或:PERF(latest_ingestion)
,这可能会将查询从使用 label 扫描更改为索引扫描,具体取决于数据库统计信息。
此外,您可能需要考虑批量处理这些更新,可能使用 APOC 过程中的apoc.periodic.iterate()
。 就像是:
CALL apoc.periodic.iterate("
MATCH (a:master_node:PERF:Application)-->(n:master_node:PERF)-[:AFFINITY]->(m:master_node:PERF)<--(a1:master_node:PERF:Application)
WHERE exists(n.latest_ingestion)
AND exists(m.latest_ingestion)
AND id(a) <> id(a1)
RETURN a, a1",
"MERGE (a)<-[:APP_AFFINITY]-(a1)",
{}) YIELD batches, total, errorMessages
RETURN batches, total, errorMessages
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.