首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j密码性能查询优化

Neo4j密码性能查询优化
EN

Stack Overflow用户
提问于 2017-12-12 20:13:39
回答 1查看 82关注 0票数 2

我有以下查询:

代码语言:javascript
复制
MATCH (dg:DecisionGroup)-[:CONTAINS]->(childD:Decision) 
WHERE dg.id = 1 
MATCH (childD)-[relationshipValueRel4:HAS_VALUE_ON]-(filterCharacteristic4:Characteristic) 
WHERE filterCharacteristic4.id = 4 
WITH relationshipValueRel4, childD, dg 
WHERE  (ANY (id IN [2,3] 
WHERE id IN relationshipValueRel4.optionIds ))  
WITH childD, dg  
OPTIONAL MATCH (childD)-[vg:HAS_VOTE_ON]->(c:Criterion) 
WHERE c.id IN [2, 3] 
WITH childD, dg, vg.avgVotesWeight as weight, vg.totalVotes as totalVotes 
RETURN childD LIMIT 10

此查询的概要信息:

Cypher版本: CYPHER 3.3,规划者:成本,运行时:解释。2773 4 ms中的总db点击率

但是当我再添加一行查询时:WITH childD , dg , toFloat(sum(weight)) as weight, toInt(sum(totalVotes)) as totalVotes

查询的内容如下:

代码语言:javascript
复制
MATCH (dg:DecisionGroup)-[:CONTAINS]->(childD:Decision) 
WHERE dg.id = 1 
MATCH (childD)-[relationshipValueRel4:HAS_VALUE_ON]-(filterCharacteristic4:Characteristic) 
WHERE filterCharacteristic4.id = 4 
WITH relationshipValueRel4, childD, dg 
WHERE  (ANY (id IN [2,3] 
WHERE id IN relationshipValueRel4.optionIds ))  
WITH childD, dg  
OPTIONAL MATCH (childD)-[vg:HAS_VOTE_ON]->(c:Criterion) 
WHERE c.id IN [2, 3] 
WITH childD, dg, vg.avgVotesWeight as weight, vg.totalVotes as totalVotes 
WITH childD , dg , toFloat(sum(weight)) as weight, toInt(sum(totalVotes)) as totalVotes  
RETURN childD LIMIT 10

配置文件信息如下:

Cypher版本: CYPHER 3.3,规划者:成本,运行时:解释。7818908 6747 ms中的总计db点击率

差别很大-- 4 ms vs 6747 ms

为什么它与这个额外的Cypher指令工作这么长时间,以及如何优化它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-13 09:37:10

我认为这与sum()操作有关,他们在计划中添加了一个EagerAggregation。

如果没有sum()操作,就会有10的限制。一旦获得第一个完整的记录,结果就可以开始流回给您,并在第10次访问时停止。规划师可能很懒,无论是在何时开始返回记录,以及在遇到第10条记录之后都可以停止,因此不需要找到所有的结果,然后再得到第10条的第一条。

但是,当您有一个迫切的聚合(如sum() (对于collect()也是一样)时,您不能这样做。为什么?因为仅仅使用childD、dg和vg只拥有一张记录是不够的。求和取决于使用相同的childD、dg和vg变量获得的每个其他记录,因此权重和总票数可以在所有这些记录中相加。而唯一的方法,你知道你有所有的记录,你需要的总和是准确的是,首先得到所有的结果。然后,当总结完成后,前10条记录被拿走,其余的被丢弃。

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

https://stackoverflow.com/questions/47780804

复制
相关文章

相似问题

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