关于关键字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分钟,我失去了耐心并停止查询。我认为第二个查询会比第一个查询更快,因为没有计数聚合操作,所以我不了解性能差异。
答案 0 :(得分:1)
您的第一个查询只返回不同值的计数,这对neo4j来说很容易。
虽然您的第二个查询返回所有不同的节点,但如果您的数据库有太多不同的值,则需要很长时间。如果您只想查看几个不同的值,可以在查询中添加limit
。
例如:
profile match (a:Item {id:'001'})<-[:LIKES]-(u:User)
return distinct u
limit 5;
它返回(随机)五个like
项目的用户(&#39; 001&#39;)。