neo4j cypher-不同的查询计划行为
带有neo4j cypher-不同的查询计划行为,neo4j,cypher,Neo4j,Cypher,带有位置节点标签的节点在标签上有索引。名称 分析以下查询为我提供了一个智能计划,在Trip节点两侧的图的两侧之间有一个NodeHashJoin。非常聪明。效果很好 PROFILE MATCH (rosen:Location)<-[:OCCURS_AT]-(ev:Event)<-[:HAS]-(trip:Trip)-[:OPERATES_ON]->(date:Date) WHERE rosen.name STARTS WITH "U Rosent" AND ev.sc
位置
节点标签的节点在标签上有索引。名称
分析以下查询为我提供了一个智能计划,在Trip
节点两侧的图的两侧之间有一个NodeHashJoin
。非常聪明。效果很好
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;
到
似乎改变了查询计划的整个行为,现在看起来更“连续”,失去了并行执行(Trip)-[:operations\u ON]->(Date)
慢多了。总共增加了6倍的DB点击率
问题
为什么通过不同的索引/机制更改一个看似不相关的位置
节点的检索会改变整个查询的行为?
(我不确定如何最好地传达有关图形模型的更多信息,但请提供建议,我很乐意添加缺少的细节)
编辑:
情况好转了。将该查询行更改为:
到
导致查询计划中的并行性丢失
像这样的查询比=
更快,这似乎很奇怪
WHERE rosen.name STARTS WITH "U Rosent" AND
WHERE id(rosen) = 4752371 AND
WHERE rosen.name STARTS WITH "U Rosent" AND
WHERE rosen.name = "U Rosenthaler Platz." AND