Neo4j - 索引和性能

时间:2015-04-10 15:09:15

标签: indexing neo4j cypher database-indexes

我对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个节点的图表需要很长时间。 我怎样才能获得更好的表现?

提前致谢

2 个答案:

答案 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来确保它使用索引,并检查查询计划。