慢速Neo4j查询。需要4312毫秒?

慢速Neo4j查询。需要4312毫秒?,neo4j,Neo4j,我用我的数据库得到了结果,但它的速度很慢 整个节点路径挂起VBI_ded42b6667f,因此我认为它应该很快 我使用的数据集只有20MB,所以我不明白为什么这么慢。在我的Neo4JProperty文件中,我将节点\u keys\u可索引设置为V、OI、VI等节点 谁能给我指点一下如何使这个查询只需要150毫秒 MATCH (VB_dbddd5e6731:VI)<-[:INS]-(VBI_ded42b6667f:V { name:'axpl' } ), ( non_dom:OI)<-

我用我的数据库得到了结果,但它的速度很慢

整个节点路径挂起VBI_ded42b6667f,因此我认为它应该很快

我使用的数据集只有20MB,所以我不明白为什么这么慢。在我的Neo4JProperty文件中,我将节点\u keys\u可索引设置为V、OI、VI等节点

谁能给我指点一下如何使这个查询只需要150毫秒

MATCH (VB_dbddd5e6731:VI)<-[:INS]-(VBI_ded42b6667f:V { name:'axpl' } ),
( non_dom:OI)<-[:AG]-(VB_dbddd5e6731 ), 
( OI_64cc557459:OI { u:'hello_ry' })<-[:PA]-(VB_dbddd5e6731 ),
(VB_3901242e244:VI)<-[:INS]-(VBI_ded42b6667f),
( p1ou:OI)<-[:AG]-(VB_3901242e244 ),
( p2ou:OI)<-[:AG]-(VB_3901242e244 ),
( OI_49067f7680:OI)<-[:PA]-(VB_3901242e244 ),
( non_dom:OI)<-[:PA]-(VB_3901242e244 )
RETURN OI_49067f7680,VB_dbddd5e6731

MATCH(VB\u dbddd5e6731:VI)我不确定
node\u keys\u indexable
属性的作用,但是您应该确保在
name
属性上为
V
标签建立索引,在
u
属性上为
OI
标签建立索引。您可以在Cypher中创建如下内容:

CREATE INDEX ON :V(name)
CREATE INDEX ON :OI(u)
如果没有帮助,请在Neo4j的web控制台中的查询开始处放置
PROFILE
,以获得输出,显示查询的哪些部分比较慢

另一个注意事项是:为了使查询更具可读性,我建议从锚节点开始(您根据属性值进行过滤的节点)。我还将组织您的
匹配
,以便它尽可能多地从锚节点流出。像这样:

MATCH
  (OI_64cc557459:OI { u:'hello_ry' })<-[:PA]-(VB_dbddd5e6731:VI)
  <-[:INS]-(VBI_ded42b6667f:V { name:'axpl' } )-[:INS]->(VB_3901242e244:VI),

  (VB_dbddd5e6731)-[:AG]->(non_dom:OI)

  (VB_3901242e244)-[:AG]->(p1ou:OI)
  (VB_3901242e244)-[:AG]->(p2ou:OI)
  (VB_3901242e244)-[:PA]->(OI_49067f7680:OI)
  (VB_3901242e244)-[:PA]->(non_dom)

RETURN
  OI_49067f7680,
  VB_dbddd5e6731
匹配
(OI_64cc557459:OI{u:'hello_ry'})(非dom:OI)
(VB_3901242e244)-[:AG]->(p1ou:OI)
(VB_3901242e244)-[:AG]->(p2ou:OI)
(VB_3901242e244)-[:PA]->(OI_49067f7680:OI)
(VB_3901242e244)-[:PA]->(非dom)
返回
OI_49067f7680,
VB_dbddd5e6731

另外,可能您的查询是动态生成的,但我发现由于所有的首字母缩略词,很难理解这个域。如果你一个人工作,这可能不是问题,但如果你得到任何帮助,它会让事情变得混乱。当你使用描述性标签和关系类型时,Neo4j(我认为)效果最好。

Brian,谢谢你的建议。我不明白为什么我需要对Neo4j中只有329个节点/边的所有内容进行索引。我只能想象数百万节点的性能。我添加了索引,但查询仍然是~3000ms。我不敢相信我必须开始检查几百个节点(没有其他数据库要求)的查询计划,我和Brian在一起。我真的不明白这里发生了什么,因为所有这些机器般的名字。3秒对于您大小的数据集上的任何查询来说都太长了。最有可能的是,您编写查询的方式使Neo4j所做的工作比它应该做的要多得多。如果您谈论的是数百个节点,那么索引不会有多大帮助,因此我不确定它为什么慢。你有多少关系?另外,您是否运行了
配置文件
?是的,密码是自动生成的。我不能改变名字。谢谢你的帮助!我正在调查这个问题。