neo4j cypher,当id(n)处于条件状态时指定标签的性能

时间:2014-01-26 20:03:46

标签: neo4j cypher

有人测试/知道 - 当用Cypher查询Neo4j数据库时 - 指定

MATCH node:labels
即使

也会使选择更快

WHERE id(node) = x

到位了吗?

1 个答案:

答案 0 :(得分:2)

MATCH (n)
WHERE ID(n) = {x}
RETURN n

应该比

快得多
MATCH (n:MyLabel)
WHERE ID(n) = {x}
RETURN n

两个查询首先按内部ID获取节点,但第一个查询返回第二个查询时,结果在hasLabel(n:MyLabel)上过滤。

这是过度使用标签的可能性的一个很好的例子。同样,如果对于模式(a:Person {name:"Étienne Gilson"})-[:FRIEND]->(b:Person)-[:FRIEND]->(c:Person),我知道只有:Person个节点具有-[:FRIEND]-个关系,那么在该标签上过滤bc就没有意义了。如果应该从索引中检索远程节点,则应该包含标签以指示,即-[:FRIEND]->(b:Person {name:"Jacques Maritain"}),但是当模式的该部分中不包含(索引)属性时,将通过遍历和如果只有人有朋友,hasLabel(b:Person)上的额外过滤器将毫无意义。

我理解this blog post表示对标签的过滤与按位&一样便宜,因此性能差异应该非常小。