使用标签或节点优化查询密码

时间:2018-05-25 18:44:08

标签: optimization graph neo4j

我需要知道我的数据库中哪些用户是活动的,哪些不是。第一种方法是将典型的Property Active 设置为true或false,但在查询中返回活动用户必须经过所有节点。我认为它可以通过多种方式进行优化。第一个是创建活动节点,以便活跃用户拥有关系MATCH (u:User)-[:IS]-> (Active) return u,另一个是创建标签:活动,以便返回它将是MATCH (u:Active) RETURN u。与答案类似:Neo4j node property type。我个人认为分配标签更有效率,我不知道如何返回不活跃的用户,我不想为Inactive创建第二个标签。你觉得怎么样?

2 个答案:

答案 0 :(得分:1)

您给每个User一个布尔active属性,并在其上创建一个doc,如下所示:

CREATE INDEX ON :User(active);

然后,您可以快速获得所有活跃用户:

MATCH (u:User)
WHERE u.active
RETURN u;

以及所有非活跃用户:

MATCH (u:User)
WHERE NOT u.active
RETURN u;

答案 1 :(得分:0)

为了进行更深入的测试,我添加到数据库 240'014 他们 120'000 的用户被标记为活动,做3种类型查询:

  1. 财产有效match(c:User) where c.active=true return c.name延迟 285ms match(c:User) where c.active=true return count(c)延迟 75ms

  2. 带标签的
  3. :有效match(c:Active) return c.name延迟 271ms match(c:Active) return count(c)延迟 1ms

  4. 节点有效match(c:User)-[:IS]->(:Active) return c.name延迟 433ms match(c:User)-[:IS]->(:Active) return count(c)延迟 167ms