首页 > 解决方案 > Neo4j 在 ORDER BY 上表现不佳

问题描述

我有这样的查询

MATCH (p:Person)-[s:KNOWS]->(t:Person) WHERE s.state = "blocked"
WITH DISTINCT (t) AS user
SKIP 0
LIMIT 10
MATCH (user)<-[r:KNOWS { state: "blocked" }]-(p:Person)
RETURN user.username, SIZE(COLLECT(p.username)) as count

在此处输入图像描述

第一个问题是当我有 SKIP 例如 100 时,它变得越来越慢,知道为什么吗?

秒问题是,当我尝试添加 ORDER BY 时,例如 ORDER BY p.createdAt 这是日期(索引字段),它总是超时。

标签: neo4jgraph-databases

解决方案


通过调整初始 MATCH,您可能会获得更好的性能:

MATCH (t:Person) 
WHERE ()-[:KNOWS {state:"blocked"}]->(t)
WITH t AS user // no longer need DISTINCT here
...

为了获得更好的性能,您可以考虑通过其 state 属性在 :KNOWS 关系上创建全文模式索引,并使用全文索引查询过程来执行此初始查找(这是假设 :KNOWS 关系始终连接两个 :Person 节点)。


推荐阅读