具有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;
但是,只需更改一行查询:
WHERE rosen.name STARTS WITH "U Rosent" AND
到
WHERE id(rosen) = 4752371 AND
似乎改变了查询计划的整个行为,现在看来变得更加“顺序”,失去了(Trip)-[:OPERATES_ON]->(Date)
的并行执行
慢得多。总共6次DB命中率。
问题
为什么通过不同的索引/机制更改一个看似无关的Location
节点的检索会改变整个查询的行为?
(我不确定如何最好地传达有关图表模型的更多信息,但请提供建议,我很乐意添加缺少的详细信息)
修改
变得更好。从以下位置更改该查询行:
WHERE rosen.name STARTS WITH "U Rosent" AND
到
WHERE rosen.name = "U Rosenthaler Platz." AND
导致查询计划中出现同样的并行性丢失!
奇怪的是,LIKE
查询比=
更快?