由约束创建的Neo4j索引



我仍在努力解决速度问题(如图所示:Cypher MATCH查询速度)。

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

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

QueryExecutionKernelException:标签为"Person",属性为"username"在它们上定义了一个唯一的约束,因此索引已经创建了与此匹配的。

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

neo4j sh(?)$index--索引
节点索引:

关系指数:

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

主要问题(如上面的链接所示)是,下面的简单查询花费了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标有"Geotaged"的节点也被标记为"Person"。所有节点都是"Person",有些恰好也是"Geotaged"。

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

对于旧索引使用index命令,使用schema列出架构索引和约束

此外,如果你通过:Geotagged(username)匹配,你必须有一个该组合的索引:

 create index on :Geotagged(username);

或者改为在CCD_ 4上匹配。

最新更新