Neo4j:提高密码性能
我有下面的cypher查询,其中我必须Neo4j:提高密码性能,neo4j,cypher,Neo4j,Cypher,我有下面的cypher查询,其中我必须展开大约100个数据。但我的问题是,要运行查询,执行它需要很多时间(大约3-4分钟) 我的问题是: CREATE (pl:List {id: {id}, title: {title} }) WITH pl as pl MATCH (b:Units {id: {bId} }) MERGE (b)-[rpl:UNITS_LIST]->(pl) WITH pl as pl UNWIND
展开大约100个数据。但我的问题是,要运行查询,执行它需要很多时间(大约3-4分钟)
我的问题是:
CREATE (pl:List {id: {id}, title: {title} })
WITH pl as pl
MATCH (b:Units {id: {bId} })
MERGE (b)-[rpl:UNITS_LIST]->(pl)
WITH pl as pl
UNWIND {Ids} as Id
MATCH (p:Infos {id: Id})
WITH p as cn, pl as pl
SET cn :Data
WITH pl as pl, cn as cn
MERGE (pl)-[cnpt:DATA_LIST { email: cn.email } ]->(cn)
RETURN pl
样本数据
List:
{
id: 'some-unique-id',
name: "some-name''
}
Ids ( Ids should be around 100 ):
[ 'some-info-id-01','some-info-id-03' ]
Infos (Neo4j DB):
[
{ id: 'some-info-id-01', others: 'some-others-data-01' },
{ id: 'some-info-id-02', others: 'some-others-data-02' },
{ id: 'some-info-id-03', others: 'some-others-data-03' }
]
有没有改进此密码查询的建议
PS,我正在node.js应用程序中运行这个CQL
如果有适当的索引,这个查询看起来应该非常快
您应该准备好以下各项:
创建索引:Infos(id);
创建索引:单位(id);
在上创建索引:列表(id);
有了这些索引,查询应该会很快,因为大多数情况下,您都是通过这些ID查找节点,然后在上面做一些非常小的事情。即使有100个ID,查询也不难
相反,如果您没有对ID字段进行索引,neo4j将必须查看大部分/所有字段,以确定要匹配的项。数据越多,查询速度越慢
如果您对这些内容进行了索引,但仍然发现性能非常缓慢,则需要解释查询并发布计划以获得进一步反馈。请分析您的查询并将结果查询计划添加到您的问题中(所有元素都展开)。另外,请让我们知道您在数据库中有哪些索引和约束(运行:schema
的结果)