neo4j是先匹配后过滤还是先过滤后匹配

neo4j是先匹配后过滤还是先过滤后匹配,neo4j,cypher,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 也就是说,只要左在左ID中,右在右ID中,就给我所有左连接到右的路径 我应该期待neo4j吗 执行左和右的笛卡尔乘积,然后过滤结果-或 它是否只在确定允许哪些节点后才搜索路径 还有-有没有什么明显的方法让我自己去搜索-比如有没有一个查询计划,或

当我运行查询时

MATCH paths=(l:Left)-[:CONNECTED_TO*..5]->(r:Right)
WHERE (l.id IN $left_ids) AND (r.id IN $right_ids)
RETURN paths
也就是说,只要左在
左ID
中,右在
右ID
中,就给我所有
左连接到
右的
路径

我应该期待neo4j吗

  • 执行左
  • 和右
    的笛卡尔乘积,然后过滤结果-或
  • 它是否只在确定允许哪些节点后才搜索路径
  • 还有-有没有什么明显的方法让我自己去搜索-比如有没有一个查询计划,或者一些我错过的好的详细文档

    看看Neo4j文档的一章:

    解释

    如果要查看执行计划但不运行语句, 在你的密码声明前加上解释。这句话永远不会改变 返回一个空结果,不更改数据库

    个人资料

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

    因此,您可以使用
    PROFILE
    EXPLAIN
    预先结束查询,并查看Neo4j生成的。这样:

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

    嗨@danodonovan,不客气。这解决了你的问题?如果是这样,请考虑接受它作为正确的答案。否则,请告诉我。那我可以再帮你一次。