然后neo4j MATCH过滤或过滤MATCH

时间:2018-02-09 17:26:47

标签: neo4j cypher

当我运行查询时

MATCH paths=(l:Left)-[:CONNECTED_TO*..5]->(r:Right)
WHERE (l.id IN $left_ids) AND (r.id IN $right_ids)
RETURN paths

即,只要左侧位于paths且右侧位于Left,请Right left_idsright_ids相关联。

我应该期待neo4j

  1. 执行LeftRight的笛卡尔积,然后过滤结果 - 或
  2. 一旦确定允许哪些节点,它才会搜索路径吗?
  3. 另外 - 有没有明显的方式让我自己搜索一下 - 也就是说有一个查询计划器,或者一些我错过的好的文档?

1 个答案:

答案 0 :(得分:2)

查看Neo4j文档的Profiling章节:

  

<强> EXPLAIN

     

如果要查看执行计划但不运行该语句,   使用EXPLAIN添加Cypher语句。声明将永远   返回一个空结果,不对数据库进行任何更改。

     

配置文件

     

如果要运行该语句并查看哪些运算符正在执行   大多数工作,使用PROFILE。这将运行您的声明并保持   跟踪每个操作员通过的行数,以及每个操作员的数量   operator需要与存储层进行交互才能检索   必要的数据。请注意,对查询进行概要分析会使用更多   资源,所以除非你积极工作,否则你不应该分析   在查询上。

因此,您可以使用PROFILEEXPLAIN添加查询,并查看Neo4j生成的execution plan。这样:

PROFILE MATCH paths=(l:Left)-[:CONNECTED_TO*..5]->(r:Right)
WHERE (l.id IN $left_ids) AND (r.id IN $right_ids)
RETURN paths