Neo4j如何让这个查询使用索引?

bmp9r5qi  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(177)

我有这个查询,它拒绝使用索引,idk,如果它是因为管道中的“扩展”阶段或确切的什么,但我不能让它使用这种形式的索引,特别是在ORDER BY子句中,它仍然给我一个“排序”阶段的计划器,我想避免它。
索引是createdAt属性。

PROFILE
MATCH (u:User {user_id: '61c84762da4e457d55656efa'})-[follows:FOLLOWS]->(following:User)-[relatedTo:POSTED|SHARED]->(everything)
WHERE relatedTo.createdAt > datetime("2000-02-12T15:42:10.866+00:00")
RETURN u, relatedTo, everything
ORDER BY relatedTo.createdAt DESC

这是策划者的照片

它做我想让它做的事情的唯一方法是,如果我删除最后一个关系之前的所有内容,这显然违背了那个查询的要点,但它只是为了测试。

PROFILE
MATCH (following:User)-[relatedTo:POSTED|SHARED]->(everything)
WHERE relatedTo.createdAt > datetime("2000-02-12T15:42:10.866+00:00")
RETURN relatedTo, everything
ORDER BY relatedTo.createdAt DESC

现在它使用索引。

有什么想法我怎么让它在查询和排序中都使用索引吗?

htrmnn0y

htrmnn0y1#

我不太清楚为什么要使用索引。在第一个查询中,索引用于查找:User节点,然后跟随关系指针查找其他感兴趣的节点。在Neo4j中,跟随关系指针总是比尝试使用索引查找节点更快(与关系数据库不同)。通常,您只想使用索引来查找路径中的开始节点,这就是你的第一个查询所做的,如果你真的想分割查询,在路径的不同部分开始索引搜索,你可以使用WITH把查询分割成多个部分。

相关问题