我对Neo4j中Cypher查询的性能存有疑问。 情况是:我的图表的每个节点都有一个属性,我想计算具有相同属性的节点数。 所以,我的基本查询是
match (n:NodeLabel)
with n.community as community, n.myid as myid
match (m) where m.community = community
return myid, count(m) as totcommunity
我在属性"社区"
上创建了一个索引create index on :NodeLabel(Community)
但表现非常糟糕:拥有200.000个节点的图表需要很长时间。 我怎样才能获得更好的表现?
提前致谢
答案 0 :(得分:1)
如果要返回每个不同的社区值以及具有该值的节点数:
MATCH (n:NodeLabel)
RETURN n.community, COUNT(n);
相反,如果您希望获得与特定节点具有相同community
值的节点数量(如我所指定的myid
),请尝试以下查询:
MATCH (n:NodeLabel {myid: 123})
WITH n.community AS c, n.myid AS myid
MATCH (n:NodeLabel)
WHERE n.community = c
RETURN myid, n.community, COUNT(n);
答案 1 :(得分:1)
您忘记为第二场比赛添加标签,然后无法使用索引: 试试这个:
match (n:NodeLabel)
match (m:NodeLabel) where m.community = n.community
return n.myid as myid, count(*) as totcommunity
您还可以通过在查询前加上EXPLAIN
来确保它使用索引,并检查查询计划。