【发布时间】:2019-07-08 13:37:16
【问题描述】:
我正在尝试在 Neo4j Cypher 中分析查询。
我从这个查询开始:
PROFILE MATCH (t1:Trip{Direction:1, Route:"01"}),(t2:Trip{Direction:0, Route:"01"})
WITH t1, t2 LIMIT 1
MATCH p4 = (t2)−[:STARTS|STOPS|ENDS]−>(:BusStop), p3=(t1)−[:STARTS|STOPS|ENDS]−(:BusStop)
RETURN p3, p4;
我得到以下执行计划:
总 db hits 为 10。查询的分析速度非常快。
在第 32 分钟的 this webinar 中,建议避免笛卡尔积运算。据此,我将查询转换为以下内容:
PROFILE MATCH (t1:Trip{Direction:1, Route:"01"})
WITH t1 LIMIT 1
MATCH (t2:Trip{Direction:0, Route:"01"})
WITH t1, t2 LIMIT 1
RETURN t1, t2;
导致这个执行计划:
总 db hits 为 11:增加了。
现在分析显示笛卡尔积消失了,但执行似乎要慢得多,并且 db hits 增加了。
为什么笛卡尔积消失了却变慢了? 哪个查询更好:没有笛卡尔积的查询或 db hits 较少的查询?如何改进我的查询?
【问题讨论】:
标签: neo4j cypher profiling graph-databases cartesian-product