关键字distinct

时间:2016-06-02 19:11:56

标签: neo4j cypher

关于关键字DISTINCT的使用,我有一个天真的问题。所以基本上我有一个图表(User- [Likes] - > Item),有数百万个节点。我想找到喜欢某个项目的不同用户。以下两个查询具有显着的性能差异,我感到困惑。我创建索引:Item(id)和:User(id)。

查询1:

profile match (a:Item {id:'001'})<-[:LIKES]-(u:User)
return  count(distinct u);

查询2:

profile match (a:Item {id:'001'})<-[:LIKES]-(u:User)
return  distinct u;

第一个查询以秒为单位返回结果,但第二个查询继续运行超过5分钟,我失去了耐心并停止查询。我认为第二个查询会比第一个查询更快,因为没有计数聚合操作,所以我不了解性能差异。

1 个答案:

答案 0 :(得分:1)

您的第一个查询只返回不同值的计数,这对neo4j来说很容易。

虽然您的第二个查询返回所有不同的节点,但如果您的数据库有太多不同的值,则需要很长时间。如果您只想查看几个不同的值,可以在查询中添加limit

例如:

profile match (a:Item {id:'001'})<-[:LIKES]-(u:User)
return  distinct u 
limit 5;

它返回(随机)五个like项目的用户(&#39; 001&#39;)。