如何用`OR`提高cypher查询的性能?

时间:2016-04-14 20:57:00

标签: neo4j cypher

我的查询是: match (n :l1)-[r]-(n2 :l2) where n.id=10 OR n2.id=5 return n,n2,r

我希望这会返回包含nn2且包含给定标签的所有元素。

我在n :li(id)n2 :l2(id)都有索引,但是在个人资料中它表示它正在制作一个NodeByLabelScan,数千个db命中...为什么?

AND的同一查询确实使用了索引。

编辑:@StefanArmbruster使用UNION的解决方案执行方式更好,因为它分别执行每个查询,然后合并结果而不点击数据库。数以百万计的db命中数以千计:)

1 个答案:

答案 0 :(得分:1)

我想这是使用UNION的好候选人:

MATCH (n:l1{id:10})-[r]-(n2)
RETURN n, r, n2
UNION
MATCH (n:l2{id:5})-[r]-(n2)
RETURN n, r, n2