【发布时间】:2017-08-23 14:06:24
【问题描述】:
我使用具有 177,000,000 个节点和 352,000,000 个关系的 Neo4j 数据库(通过 docker 访问)。这是我要改进的示例查询:
MATCH (a:NodeA {prop1: $prop1})<-[:BA]-(b:NodeB)-[:BC]->(c:NodeC)-[:CD]->(d:NodeD)-[:DE]->(e:NodeE)
RETURN e.prop2, a.prop1, a.prop3, c.prop4, c.prop5, b.prop6;
prop1 上有一个索引。
我使用 python v1 驱动程序来测量查询执行时间。 ResultSummary 中有两个不同的时间:
- 服务器使结果可供消费所用的时间(我称之为“可用”时间)
- 服务器消费结果所用的时间(我称之为“消费”时间)
我的查询的“可用”时间很短(1 到 80 毫秒),但“消耗”时间很长(最多 350000 毫秒)。
我尝试使用参数优化查询,并更改了一些内存配置(增加页面缓存大小和减少堆大小),这导致更短的“可用”时间(1 到 15 毫秒)和更短的“消耗”时间(20000 到 250000 毫秒)。 可惜消耗时间还是很高的!
我的问题:
- 我不太了解这两个时间度量之间的区别。他们测量什么?
- 如何改进我的查询? (除了索引)
谢谢你, 雷马
【问题讨论】:
-
你有多少结果? (=
MATCH (.. your match clause.) RETURN COUNT(*)返回什么?) -
大约有 9000 个结果。