Neo4j Cypher性能查询优化
我有以下疑问:Neo4j Cypher性能查询优化,neo4j,cypher,Neo4j,Cypher,我有以下疑问: 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, d
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
此查询的配置文件信息:
密码版本:密码3.3,计划员:成本,运行时:解释。2773
4毫秒内的总db点击次数
但当我再添加一行进行查询时:以childD、dg、toFloat(sum(weight))作为权重,toInt(sum(totalvoces))作为totalvoces
查询如下所示:
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
配置文件信息如下所示:
密码版本:密码3.3,计划员:成本,运行时:解释。
7818908在6747毫秒内的总db命中率
差异非常大-4ms与6747ms
为什么它使用这个额外的密码指令工作这么长时间,以及如何优化它?我认为这与
sum()
操作有关,它们为计划添加了一个聚合
如果没有sum()
操作,则限制为10。一旦获得第一条完整记录,结果就可以开始流式返回给您,并在您到达第10条时停止。计划者可以是懒惰的,无论是在何时开始返回记录,还是在遇到第10条记录后停止,都不需要找到所有结果,然后再得到第10条记录中的第一条
但是,当您有一个急切的聚合,例如
sum()
(与collect()
相同)时,您不能这样做。为什么?因为仅仅有一张childD、dg和vg的记录是不够的。求和取决于使用相同的childD、dg和vg变量获得每个其他记录,因此可以对所有这些记录的权重和总投票数求和。要知道你有所有的记录才能保证总数的准确性,唯一的方法就是先得到所有的结果。然后,当总和完成时,将获取前10条记录,其余记录丢弃。您可以为另一个查询添加配置文件计划,并标记哪个是哪个?@InverseFalcon我有第一个查询的配置文件计划