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,那就太好了。
您可以在查询前加上 PROFILE
或 EXPLAIN
前缀,以了解幕后发生的事情:https://neo4j.com/docs/cypher-manual/current/query-tuning/how-do-i-profile-a-query/#how-do-i-profile-a-query
执行计划将显示 if/what 使用索引,例如
要搜索满足模式的节点,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,那就太好了。
您可以在查询前加上 PROFILE
或 EXPLAIN
前缀,以了解幕后发生的事情:https://neo4j.com/docs/cypher-manual/current/query-tuning/how-do-i-profile-a-query/#how-do-i-profile-a-query
执行计划将显示 if/what 使用索引,例如