首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提高查询计数性能

问提高查询计数性能
EN

Stack Overflow用户
提问于 2018-09-08 05:04:56
回答 2查看 24关注 0票数 0

我在我的网站上有一个表格,以显示链接的列表和它们被访问的次数。下面是我用来获取这样的数据的cypher查询:

代码语言:javascript
复制
MATCH (u:USER {email: $email})-[:CREATED]->(l:URL)
OPTIONAL MATCH (l)<-[v:VISITED]-(:VISIT)
RETURN l, COUNT(v) AS count
LIMIT 10

我为URL的每次访问创建了一个访问节点,以便存储每次访问的分析数据。因此,在上面的代码中,我获取了用户创建的链接,并计算了每个链接的访问量。

问题是上面的查询是不能执行的。现在数据变得非常庞大,至少需要8秒才能解决。

有什么方法可以改进这个查询吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-08 05:16:10

对于:访问关系,如果它们只连接:访问节点到:URL节点,那么您可以在模式上使用size()函数,不包括节点标签,它将从:URL节点本身获得学位信息,而不必展开(您可以通过对计划执行概要或解释来确认这一点,并展开所有元素,在Projection操作中查找GetDegreePrimitive )。

此外,由于您在没有任何排序的情况下使用了LIMIT 10,因此最好在更早的时候执行LIMIT,以便只对有限的节点集执行后续操作,而不是对所有节点执行所有工作,而不是只保留10。

代码语言:javascript
复制
MATCH (u:USER {email: $email})-[:CREATED]->(l:URL)
WITH l
LIMIT 10
RETURN l, size((l)<-[:VISITED]-()) as count

此外,正如cybersam所指出的,您绝对需要在:USER (电子邮件)上建立索引,以便快速查找特定的:USER节点。

票数 1
EN

Stack Overflow用户

发布于 2018-09-08 05:56:45

除了@InverseFalcon的建议之外,您还应该在:USER(email)上创建an index or uniqueness constraint,以避免必须扫描所有USER节点才能找到感兴趣的节点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52229620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档