Neo4j 应该直接比较节点,还是必须先通过ID()进行比较?

Neo4j 应该直接比较节点,还是必须先通过ID()进行比较?,neo4j,cypher,Neo4j,Cypher,我有一个密码查询,其中列出了至少与另一个部门有一个连接的所有文件。目前,这可以通过以下两种方式完成: 直接比较节点 到目前为止的查询结果是相同的。第一种方法看起来更整洁,但第二种方法看起来更严格 问题是:这两种方法,特别是第一种,在性能上有什么不同吗?例如,Neo4j可能会在比较之前对节点的属性进行散列。但是应用微优化,Neo4j也可以将所有节点编译为相同的执行计划。比较两个节点的(in)相等性实际上等同于比较它们的本机ID。性能差异(如果有)应该是微不足道的 真的!要添加一些上下文,在执行

我有一个密码查询,其中列出了至少与另一个部门有一个连接的所有文件。目前,这可以通过以下两种方式完成:

  • 直接比较节点
到目前为止的查询结果是相同的。第一种方法看起来更整洁,但第二种方法看起来更严格


问题是:这两种方法,特别是第一种,在性能上有什么不同吗?例如,Neo4j可能会在比较之前对节点的属性进行散列。但是应用微优化,Neo4j也可以将所有节点编译为相同的执行计划。

比较两个节点的(in)相等性实际上等同于比较它们的本机ID。性能差异(如果有)应该是微不足道的

真的!要添加一些上下文,在执行查询中,节点变量是节点的轻量级结构(只有在访问或返回节点时才会投影属性)。其id()随时可用,并在与其他节点进行比较时使用。
MATCH (d1:Department)-[:BELONG_TO]-(n1:File)-[:DATA_LINK]-(n2:File)-[:BELONG_TO]-(d2:Department)
WHERE d1 <> d2
RETURN n1.name
MATCH (d1:Department)-[:BELONG_TO]-(n1:File)-[:DATA_LINK]-(n2:File)-[:BELONG_TO]-(d2:Department)
WHERE ID(d1) <> ID(d2)
RETURN n1.name