有人测试/知道 - 当用Cypher查询Neo4j数据库时 - 指定
MATCH node:labels
即使,也会使选择更快
WHERE id(node) = x
到位了吗?
答案 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]-
个关系,那么在该标签上过滤b
和c
就没有意义了。如果应该从索引中检索远程节点,则应该包含标签以指示,即-[:FRIEND]->(b:Person {name:"Jacques Maritain"})
,但是当模式的该部分中不包含(索引)属性时,将通过遍历和如果只有人有朋友,hasLabel(b:Person)
上的额外过滤器将毫无意义。
我理解this blog post表示对标签的过滤与按位&
一样便宜,因此性能差异应该非常小。