为什么neo4j中的返回节点更快然后返回节点的属性?

时间:2016-06-08 16:34:36

标签: neo4j profiling cypher

我运行类似的查询,首先返回节点

PROFILE
MATCH (me:USER{userId:"1"})-[:in_group]->(group), (group)<-[:in_group]-(other) 
return group, collect(other) as participants 

第一个查询执行计划有105个db命中

First query execution plan

第二个查询的不同之处仅在于它返回节点的属性:

PROFILE
MATCH (me:USER{userId:"1"})-[:in_group]->(group), (group)<-[:in_group]-(other) 
return group.groupId, collect(other.userId) as participants 

使用更长的执行计划结束,使用255 db命中:

Second query execution plan

如果已经提取了节点,为什么我们需要这种投影和急切聚合来访问db?它们是否没有属性?如果是这样,为什么我们在第一种情况下没有额外的数据库命中,因为返回的节点及其属性。

UPD: 我对groupId和userId有唯一的约束。 :schema的结果:

Indexes
ON :USER(userId)   ONLINE (for uniqueness constraint) 
ON :GROUP(groupId) ONLINE (for uniqueness constraint) 

Constraints
ON (user:USER) ASSERT user.userId IS UNIQUE
ON (group:GROUP) ASSERT group.groupId IS UNIQUE

0 个答案:

没有答案