Cypher中间ORDER BY在PARALLEL运行时的结果顺序疑问
在PARALLEL运行时中,Cypher中间ORDER BY后的顺序能否维持?
答案是不能保证维持原排序顺序。
PARALLEL运行时的核心目标是通过并行处理提升查询效率,在你给出的示例里,ORDER BY之后的MATCH阶段会被拆分成多个并行任务执行——每个Product节点关联User的匹配操作会同时进行。由于并行任务的完成时间没有固定顺序,最终返回结果的顺序会取决于各个任务的结束时间,而非之前ORDER BY建立的排序逻辑。
而SLOTTED或PIPELINED运行时是串行处理查询的各个阶段,ORDER BY后的结果会按顺序进入下一个MATCH步骤,所以能稳定保留排序后的顺序。
如果想在PARALLEL运行时也确保结果顺序正确,需要在最终的RETURN语句前再添加一次ORDER BY,修改后的查询如下:
MATCH (p:Product) WITH p ORDER BY p.id DESC LIMIT 5 MATCH (p)-[:CREATED_BY]->(u:User) RETURN p.id, u.name ORDER BY p.id DESC
这样无论使用哪种运行时,最终返回的结果都会严格按照p.id降序排列。
内容的提问来源于stack exchange,提问作者alexanoid
相关产品推荐
相关产品推荐

