0
我在Neo4J中有以下Cypher查询,它可以获取图中的所有节点以及JSON文件的连接,然后使用Sigma.Js库显示图。如何让Neo4J Cypher查询更快执行?
MATCH (c1:Concept), (c2:Concept), (ctx:Context), c1-[rel:TO]->c2
WHERE (rel.user='9d6e7140-f3c3-11e3-927f-1f5ca4210ac7'
AND ctx.uid = rel.context)
WITH DISTINCT c1, c2
MATCH (ctxname:Context), c1-[relall:TO]->c2
WHERE (relall.user='9d6e7140-f3c3-11e3-927f-1f5ca4210ac7'
AND ctxname.uid = relall.context)
RETURN DISTINCT
c1.uid AS source_id,
c1.name AS source_name,
c2.uid AS target_id,
c2.name AS target_name,
relall.uid AS edge_id,
ctxname.name AS context_name,
relall.statement AS statement_id,
relall.weight AS weight;
这个特定的查询返回89行数据。
奇怪的是,当c1
和c2
节点的数量和rel
关系很小时,它工作得相对较快。然而,随着这些节点的数量和它们之间的关系增加,查询速度变得非常慢,可能是因为Neo4J必须通过很多关系重申。
如果我需要它以相同的格式返回数据并且它应该全部在一个查询中完成,您是否知道如何更快地创建此查询?
这里的个人资料信息:
Distinct(_rows=89, _db_hits=0)
Extract(symKeys=["c1", "c2", "ctxname", "relall"], exprKeys=["source_name",
"statement_id", "edge_id", "target_id", "source_id", "target_name", "context_name",
"weight"], _rows=89, _db_hits=712)
Filter(pred="(Property(relall,user(8)) == Literal(9d6e7140-f3c3-11e3-927f-1f5ca4210ac7)
AND Property(ctxname,uid(1)) == Property(relall,context(7)))", _rows=89, _db_hits=267)
SimplePatternMatcher(g="(c1)-['relall']-(c2)", _rows=89, _db_hits=2166150)
NodeByLabel(identifier="ctxname", _db_hits=0, _rows=44100, label="Context",
identifiers=["ctxname"], producer="NodeByLabel")
Distinct(_rows=84, _db_hits=0)
Filter(pred="Property(ctx,uid(1)) == Property(rel,context(7))", _rows=89, _db_hits=93450)
NodeByLabel(identifier="ctx", _db_hits=0, _rows=46725, label="Context",
identifiers=["ctx"], producer="NodeByLabel")
Filter(pred="hasLabel(c2:Concept(1))", _rows=89, _db_hits=0)
TraversalMatcher(start={"label": "Concept", "producer": "NodeByLabel",
"identifiers": ["c1"]}, trail="(c1)-[rel:TO WHERE hasLabel(NodeIdentifier():Concept(1))
AND Property(RelationshipIdentifier(),user(8)) == Literal(9d6e7140-f3c3-11e3-927f-
1f5ca4210ac7)]->(c2)", _rows=89, _db_hits=127572)
感谢您的帮助,您可以提供,或者至少,如果你能告诉我这个查询的薄弱点是从个人资料信息判断之上...