由约束创建的 Neo4j 索引

Neo4j Index created by constraint

我仍在尝试解决我的速度问题(此处显示:Cypher MATCH query speed)。

我注意到的一件事是,当我导入具有唯一约束的数据时(由以下证明)。

neo4j-sh (?)$ create index on :Person(username);

QueryExecutionKernelException: Label 'Person' and property 'username' have a unique constraint defined on them, so an index is already created that matches this.

当我尝试查看 shell 中的索引时,我得到以下信息:

neo4j-sh (?)$ index --indexes
Node indexes:

Relationship indexes:

自动生成的索引不应该显示吗?我如何验证唯一约束实际上是在索引用户名?

主要问题(如上图 link 所示)是下面的简单查询耗时 36 秒(使用急切调用),切换到非急切调用时是该时间的两倍。

USING PERIODIC COMMIT 15000
LOAD CSV WITH HEADERS FROM "file:d:/messages.csv" AS line
MATCH (a:Geotagged { username: line.sender }) - [r:MSGED] -> (b:Geotagged { username: line.recipient })
RETURN NULL;

请注意,这不包括我最初尝试使用的 SET 调用,我删除了它,而 MATCH 单独使用了很长时间。

此外,我还将页面缓存增加到我应该需要的数倍,但没有看到任何变化。

编辑 1 标有 'Geotagged' 的节点也被标记为 'Person'。所有节点都是'Person',有些恰好也是'Geotagged'.

您是否对 Geotagged 标签和 Person 标签使用了唯一性约束?我发现两个标签的唯一性约束大大提高了速度。

您正在对遗留索引使用 index 命令,使用 schema 列出模式索引和约束

此外,如果您通过 :Geotagged(username) 进行匹配,则必须具有该组合的索引:

 create index on :Geotagged(username);

或匹配 :Person(username)