Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher性能查询优化_Neo4j_Cypher - Fatal编程技术网

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命中率

差异非常大-4ms6747ms


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

我认为这与
sum()
操作有关,它们为计划添加了一个聚合

如果没有
sum()
操作,则限制为10。一旦获得第一条完整记录,结果就可以开始流式返回给您,并在您到达第10条时停止。计划者可以是懒惰的,无论是在何时开始返回记录,还是在遇到第10条记录后停止,都不需要找到所有结果,然后再得到第10条记录中的第一条


但是,当您有一个急切的聚合,例如
sum()
(与
collect()
相同)时,您不能这样做。为什么?因为仅仅有一张childD、dg和vg的记录是不够的。求和取决于使用相同的childD、dg和vg变量获得每个其他记录,因此可以对所有这些记录的权重和总投票数求和。要知道你有所有的记录才能保证总数的准确性,唯一的方法就是先得到所有的结果。然后,当总和完成时,将获取前10条记录,其余记录丢弃。

您可以为另一个查询添加配置文件计划,并标记哪个是哪个?@InverseFalcon我有第一个查询的配置文件计划