neo4j - 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 这是日期(索引字段),它总是超时。
解决方案
通过调整初始 MATCH,您可能会获得更好的性能:
MATCH (t:Person)
WHERE ()-[:KNOWS {state:"blocked"}]->(t)
WITH t AS user // no longer need DISTINCT here
...
为了获得更好的性能,您可以考虑通过其 state 属性在 :KNOWS 关系上创建全文模式索引,并使用全文索引查询过程来执行此初始查找(这是假设 :KNOWS 关系始终连接两个 :Person 节点)。
推荐阅读
- c++ - Customization points in Eigen library
- c# - NHibenate:有没有办法用复合键创建一对多的双向关系?
- wordpress - How do I assign this code to show only on specific categories?
- angular - Datatable component in Angular 7 problem with responsiveness when fetch data from backend
- javascript - 如何在 Firefox 浏览器中使用 offsetX 和 offsetY 在 svg 内移动一个圆圈?
- dynamic-programming - 归纳证明背包递归返回最优解
- javascript - xhttp.open() onreadystatechange 在 send() 之后没有发出警报就不会触发
- flyway - flyway clean drop 多个用户/模式
- python - 如何从熊猫数据透视表中的样式(子集)中排除总行(边距)
- javascript - 在我的 ftp 上上传后,设备方向不起作用