neo4j cypher - 不同的查询计划行为

时间:2016-04-18 06:04:56

标签: neo4j cypher

具有Location节点标签的节点的索引位于Label.name

分析以下查询为我提供了一个智能计划,在NodeHashJoin个节点两侧的图表两边之间有一个Trip。非常聪明。效果很好。

PROFILE MATCH (rosen:Location)<-[:OCCURS_AT]-(ev:Event)<-[:HAS]-(trip:Trip)-[:OPERATES_ON]->(date:Date)
WHERE rosen.name STARTS WITH "U Rosent" AND
      ev.scheduled_departure_time > "07:45:00" AND
      date.date = '2015-11-20'

RETURN rosen.name, ev.scheduled_departure_time, trip.headsign
ORDER BY ev.scheduled_departure_time
LIMIT 20;

Plan with NodeHashJoin

但是,只需更改一行查询:

WHERE rosen.name STARTS WITH "U Rosent" AND

WHERE id(rosen) = 4752371 AND

似乎改变了查询计划的整个行为,现在看来变得更加“顺序”,失去了(Trip)-[:OPERATES_ON]->(Date)的并行执行

Linear plan

慢得多。总共6次DB命中率。

问题

为什么通过不同的索引/机制更改一个看似无关的Location节点的检索会改变整个查询的行为?

(我不确定如何最好地传达有关图表模型的更多信息,但请提供建议,我很乐意添加缺少的详细信息)

修改

变得更好。从以下位置更改该查询行:

WHERE rosen.name STARTS WITH "U Rosent" AND

WHERE rosen.name = "U Rosenthaler Platz." AND

导致查询计划中出现同样的并行性丢失!

奇怪的是,LIKE查询比=更快?

0 个答案:

没有答案