我正在使用 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 上运行的。
答案 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 属性上创建索引。