Neo4j 浏览器崩溃灰屏
Neo4j Browser Crash grey screen
MATCH (a:Doss)
MATCH (b:Doss)
WHERE a.Num=b.Num
return a,b
花了很长时间没有结果,只是浏览器崩溃并灰屏。
NB:in 这个数据库我有 6M 个节点。
您需要一个关于 :Doss(Num) 的索引,否则这将无法在合理的时间内完成。
关键是大多数 Cypher 操作都是按行执行的。因此,根据第一个 MATCH 的每个结果执行第二个 MATCH。
如果您没有索引,那么这可能会为 a
执行一个 NodeByLabelScan,然后每个 a
节点 执行另一个 NodeByLabelScan 并过滤以查找 b
.
的匹配项
基本上,您将总共执行 6M + 1 次标签扫描,并过滤 6M * 6M 行,这不是一个好主意。
如果添加索引,那么您将只执行一个 NodeByLabelScan,然后 6M 索引试图在每行中查找与 a
具有相同编号的所有 b
个节点。
您应该能够 运行 对查询进行 EXPLAIN 以确认计划者希望如何执行此查询。
MATCH (a:Doss)
MATCH (b:Doss)
WHERE a.Num=b.Num
return a,b
花了很长时间没有结果,只是浏览器崩溃并灰屏。 NB:in 这个数据库我有 6M 个节点。
您需要一个关于 :Doss(Num) 的索引,否则这将无法在合理的时间内完成。
关键是大多数 Cypher 操作都是按行执行的。因此,根据第一个 MATCH 的每个结果执行第二个 MATCH。
如果您没有索引,那么这可能会为 a
执行一个 NodeByLabelScan,然后每个 a
节点 执行另一个 NodeByLabelScan 并过滤以查找 b
.
基本上,您将总共执行 6M + 1 次标签扫描,并过滤 6M * 6M 行,这不是一个好主意。
如果添加索引,那么您将只执行一个 NodeByLabelScan,然后 6M 索引试图在每行中查找与 a
具有相同编号的所有 b
个节点。
您应该能够 运行 对查询进行 EXPLAIN 以确认计划者希望如何执行此查询。