首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cypher分页查询优化

Cypher分页查询优化
EN

Stack Overflow用户
提问于 2020-11-19 12:54:08
回答 1查看 33关注 0票数 0

我们在Neo4j数据库中有以下数据模型。标记为的节点和具有用户的节点

Post用户之间的关系是(Post)-:Post_BY->(User)。它表示指定用户创建了一个post。

在Post节点上,有一个名为sort_order的属性,它给出了检索post节点的顺序。index-backed;是sort_order唯一的和,一个惟一的约束是在模式中强制的。

在清单请求中,我需要获得由sort_order命令的给定用户的帖子,页面为10 (例如)

根据Neo4j文档,计划器跳过订单操作,因为节点已经根据所选属性sort_order的索引进行排序。这限制了按所选页面大小完成查询所需的数据库命中次数和时间。这完全适用于这样的查询:

代码语言:javascript
复制
MATCH (post:Post)
where post.sort_order > 0
return post
order by post.sort_order desc
limit 10

如果给出提示post.sort_order > 0

一旦需要通过给定的用户检索帖子,查询将获取与在内存中对其排序的选定用户相关的所有Post节点,并返回当前页面( 10条记录)。分析了以下所需的查询后,它似乎忽略了索引。

代码语言:javascript
复制
MATCH (post:Post)-[:IN]->(user:User {id: 3})
where post.sort_order > 0
return post
order by post.sort_order desc
limit 10

查询或数据模型中是否存在隐藏的问题?

或者,如果可以对查询、数据模型或索引进行优化。

使用的neo4j版本为3.5.23

EN

回答 1

Stack Overflow用户

发布于 2020-11-21 02:12:03

Cypher规划师可能会确定(使用服务器的DB统计信息),通常通过查找User节点(希望您有一个:User(id)索引来帮助执行)、获取相关的Post节点,然后进行排序,执行上一次查询的效率更高。

如果您成功地迫使规划师使用您的:Post(sort_order)索引,那么执行效率可能会低得多。这是因为查询仍然必须为(大概几乎)每个User获取和计算相关的Post节点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64912100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档