我仍在努力解决速度问题(如图所示: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上匹配。