Neo4j 索引查询运行缓慢

时间:2021-08-01 16:21:04

标签: neo4j cypher

我正在使用 Neo4j 4.0.6 企业版尝试进行索引查询以找到最大值。

我在这个数据库中有 500 万个用户节点。

我在 tsScan 上有一个索引:

CREATE INDEX user_scan for (u:User) on (u.tsScan)

然后我尝试了这个:

match (u:User)
            return u.id as id
            order by u.tsScan
            limit 100

这需要很长时间。大约 3 分钟。

由于它是一个 btree 索引,我希望它应该只选择预排序索引中的前 100 个指针。

为什么要花这么长时间?

我需要做什么才能在 u.tsScan 上利用 native-btree-1.0 索引?

PS:这是在 Neo4j:4.0.6-enterprise docker 容器中的 16GB 内存的 Mac 上运行的。

1 个答案:

答案 0 :(得分:0)

我建议您升级到最新的 Neo4j 版本,因为从 4.0.6 版本开始对操作顺序进行了一些升级。 此外,您可以进行一点查询优化,它可能不会产生太大的不同,但实现它仍然很好:

match (u:User)
WITH u
ORDER BY u.tsScan
LIMIT 100
RETURN u.id as id

这样您就不必访问数据库中所有用户的 id 属性,而只需访问结果 100 个用户的 id 属性。另外,请确保在 tsScan 属性上创建索引。