Neo4j 索引查询运行缓慢

Neo4j index query runs slowly

我正在使用 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:这是 运行 在 Mac 上,neo4j:4.0.6-enterprise docker 容器中有 16GB 内存。

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

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

这样您就不必为数据库中的所有用户访问 ID 属性,而只需为结果中的 100 个用户访问 ID 属性。另外,确保在 tsScan 属性.

上创建索引