是否有人测试/知道 - 在使用Cypher查询Neo4J数据库时 - 指定
MATCH node:labels
即使
使选择更快WHERE id(node) = x
就位了吗?
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"})
,但是当该部分的该部分中不包含(索引)属性(索引)属性时,traversal才能达到节点,并且只有人们只有人才朋友hasLabel(b:Person)
上的其他过滤器将毫无意义。
我理解这篇博客文章意味着在标签上的过滤与位&
一样便宜,因此性能差异应该很小。