如何在Neo4j

时间:2015-08-10 15:52:30

标签: neo4j cypher

我正在使用Neo4j v2.2.3社区版。我想按标签查询节点数量和按类型查询关系数量。我尝试过:

MATCH (n:NODE_LABEL) RETURN COUNT(DISTINCT n)

MATCH ()-[r:REL_TYPE]-() RETURN COUNT(DISTINCT r)

虽然第一个查询相当快(2.5秒),但第二个查询在几分钟后仍未结束(某些类型的关系约为1亿)。然而,根据[1],Neo4j保留了这样的信息。因此,我预计会对这两种情况立即做出回应。是否有可能以不同的方式获取此信息?

提前致谢!

[1] http://neo4j.com/docs/stable/query-schema-statistics.html

1 个答案:

答案 0 :(得分:0)

我不知道查询规划器如何使用关系类型的计数,但您可能会尝试这种稍微简单的查询:

MATCH ()-[r:REL_TYPE]->() RETURN COUNT(*)

由于没有DISTINCT,查询计划程序可能更有可能使用这些统计信息。同时指定方向将确保关系不会被计算两次(这既错误也可能更慢)

但是如果你PROFILE这个查询,我怀疑它会遍历数据库中的每个节点并跟随节点。 Neo4j默认为标签保留模式索引,但不保留关系类型。因此,如果你碰巧知道关系总是以某个标签(或标签)的节点开始,那么通过指定:

将有助于Neo4j。
MATCH (:SomeLabel)-[r:REL_TYPE]->() RETURN COUNT(*)

MATCH (n)-[r:REL_TYPE]->()
WHERE n:SomeLabel OR n:SomeOtherLabel
RETURN COUNT(*)