neo4j 是如何进行 MATCH 的?

How does neo4j perform MATCH?

要搜索满足模式的节点,neo4j 是否在假设没有索引结构可用的情况下对整个图执行 DFS/BFS?

例如,给出以下查询:

MATCH (movie:Movie)
RETURN movie.title

在我看来,如果我们不存储电影列表,我们需要遍历所有节点来回答这个查询。

另一个例子是下面的查询:

   MATCH (:Person {name: 'Oliver Stone'})--(movie:Movie) 
   RETURN movie.title

这需要找到名称为 'Oliver Stone' 的所有 Person 节点,并检查每个节点是否连接到 Movie 节点。第一步需要遍历所有 Person 节点。

如果你能 link 我给任何 documentation/code,那就太好了。

您可以在查询前加上 PROFILEEXPLAIN 前缀,以了解幕后发生的事情:https://neo4j.com/docs/cypher-manual/current/query-tuning/how-do-i-profile-a-query/#how-do-i-profile-a-query

执行计划将显示 if/what 使用索引,例如