Neo4j 相同的密码查询在不同的数据库上具有不同的性能

Neo4j 相同的密码查询在不同的数据库上具有不同的性能,neo4j,cypher,Neo4j,Cypher,我有一个fullDB(一个按国家聚类的图),它包含所有国家,我有各种单一国家测试数据库,它们包含完全相同的模式,但只针对一个给定的国家 我的查询的“开始”节点是通过匹配属性的给定值来标识的,例如 match (country:Country{name:"UK"}) 然后进入由变量country定义的主查询。因此,我希望查询时间是相似的,因为我们从同一个已知节点开始,它将在两个数据库中遍历相同数量的与其相关的节点 但是,如果我在完整的数据库中运行查询,或者只在一个国家/地区运行查询,那么我的查询

我有一个fullDB(一个按国家聚类的图),它包含所有国家,我有各种单一国家测试数据库,它们包含完全相同的模式,但只针对一个给定的国家

我的查询的“开始”节点是通过匹配属性的给定值来标识的,例如

match (country:Country{name:"UK"})
然后进入由变量country定义的主查询。因此,我希望查询时间是相似的,因为我们从同一个已知节点开始,它将在两个数据库中遍历相同数量的与其相关的节点

但是,如果我在完整的数据库中运行查询,或者只在一个国家/地区运行查询,那么我的查询的性能将非常不同

我立即想到我一定有某种“笛卡尔关系”的问题,所以我在完整数据库和单个国家数据库中分析了查询,但在计划的每个步骤中,分析都是完全相同的。我假设该配置文件会在计划中的某个点显示db命中率显著增加,但值是相同的。我是否弄错了显示的配置文件

一些尺寸: fullDB将有70k个节点,testdb672个节点,完整DB中完成查询的时间为218764ms,而testdb大约为3407ms

在写这篇文章时,我意识到某些节点(供应商可以提供不同的国家)上的传出关系数量将增加,我认为这可能是原因,但问题是为什么我在分析中没有看到任何迹象


欢迎有任何想法。

您使用的是什么版本? 这两个查询时间对于数据集大小来说都太长了

因此,您可以检查您的配置/磁盘

您是否为
:国家(名称)
创建了索引/约束,该索引是否在线


请分享您的查询和查询计划。

我使用的是最新的2.2.0版,您能给我一些建议,告诉我如何以及如何检查我的配置吗?是的,有一个关于:Country(name)的索引,但我相信这部分很好,我相信核心查询的性能受到了影响。今天晚些时候,我将添加计划的查询和图像。感谢您的回复。请参阅模式,我无法共享代码,但这是生产模式的副本。控制台上的查询生成的查询计划与我看到的真实代码相同。还有一些见解:我从计划中注意到,使用的配置文件是规则,因此我强制使用成本,这产生了巨大的影响,但对于我目前最大的集群来说仍然很慢:11k报价,10k实体,成本配置文件,完整数据库需要154270ms,在单个国家/地区数据库中需要33818ms。