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 属性.
上创建索引
我正在使用 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 属性.
上创建索引