fxe*_*fxe 5 performance neo4j cypher
我想执行无向遍历来提取通过某种类型的关系连接的所有 id
当我执行以下查询时,它返回值的速度足够快
MATCH path=(s:Node {entry:"a"})-[:RelType*1..10]-(x:Node)
RETURN collect(distinct ID(x))
Run Code Online (Sandbox Code Playgroud)
然而做
MATCH path=(s:Node {entry:"a"})-[:RelType*]-(x:Node)
RETURN collect(distinct ID(x))
Run Code Online (Sandbox Code Playgroud)
需要大量的时间。我怀疑通过使用*
它来搜索从 s 到 x 的每条路径,但由于我只想要 id,所以这些路径可以被丢弃。我真正想要的是 BFS 或 DFS 搜索来查找 s 中的连接节点。
两个查询返回完全相同的结果,因为没有最短路径大于 5 的元素(仅在测试示例中!)。
您添加了索引吗create index on :Node(entry)
?
另外,根据路径中每个节点的 rels 数量,您将获得可能返回的图表中的 rels^10(或一般 rels^steps)路径。
您可以先尝试使用较小的上限(例如 3),然后从那里开始工作吗?
当你骑自行车时,离开方向真的很痛苦。
您还可以尝试做的是:
MATCH path=(s:Node {entry:"a"})-[:RelType*]->(x:Node)
RETURN ID(X)
Run Code Online (Sandbox Code Playgroud)
并流式传输结果并在客户端中实现唯一性
或者如果您不想在客户端中实现唯一性,则可以这样做
MATCH path=(s:Node {entry:"a"})-[:RelType*]->(x:Node)
RETURN distinct ID(X)
Run Code Online (Sandbox Code Playgroud)