【发布时间】:2017-12-12 20:13:39
【问题描述】:
我有以下疑问:
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,规划器:COST,运行时:INTERPRETED。 2773 4 毫秒
内的总 db 命中
但是当我再添加一行查询时:WITH childD , dg , toFloat(sum(weight)) as weight, toInt(sum(totalVotes)) as totalVotes
查询看起来像:
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,规划器:COST,运行时:INTERPRETED。 6747 ms
内 7818908 次总 db 命中
差异非常大 - 4 ms vs 6747 ms
为什么它与这个额外的 Cypher 指令一起工作这么长时间以及如何优化它?
【问题讨论】:
-
您能否为其他查询添加 PROFILE 计划,以及哪个是哪个标签?
-
@InverseFalcon 我有第一个查询的 PROFILE 计划