今天产品经理给了我一个需求,让我统计下我们数据中的某些类型关系的数量,因为涉及到保密,我就假设他让我统计的关系名称为 FRIEND
和 FATHER
,其中 FRIEND
在创建时没有指定方向,FATHER
创建时有方向。
当统计这两种关系的数量时,我的建议是 Cypher
语句中不要带有节点标签,或者只在一端带标签,因为在我的测试中,两端都带有节点标签时,查询会超时(因为我们的数据量确实比较大):
不建议的写法:
1
| MATCH (:Person)-[r:FATHER]->(:Person) return COUNT(r);
|
建议的写法:
1 2 3
| MATCH ()-[r:FATHER]->() return COUNT(r); or MATCH (:Person)-[r:FATHER]->() return COUNT(r);
|
在查询 FRIEND
这种在创建时没有指定方向的关系是,也需要用带方向的查询语句,因为 Neo4j 实际存储时是带有方向的,详情见:http://blog.csdn.net/hwz2311245/article/details/54602706),在不指定方向的情况下,我这里的查询也是超时:
不建议的写法:
1
| MATCH ()-[r:FRIEND]-() return COUNT(r);
|
建议的写法
1
| MATCH ()-[r:FRIEND]->() return COUNT(r);
|