[英]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.