如何通过PROFILE结果优化密码查询?

时间:2016-02-09 17:08:58

标签: neo4j cypher spring-data-neo4j

我有一个包含大约10,000个节点的数据库。我通过探查器运行了以下查询,并收到了意外数量的db命中。该查询应该从给定用户uid中查找所有员工。在一个真实的数据集上,我得到了9行。

Projection
  |
  +Expand(All)
    |
    +Filter
      |
      +NodeByLabelScan

+-----------------+---------------+------+--------+--------------------------------+---------------------------------+
|        Operator | EstimatedRows | Rows | DbHits |                    Identifiers |                           Other |
+-----------------+---------------+------+--------+--------------------------------+---------------------------------+
|      Projection |            38 |    9 |      0 | anon[64], anon[7], employee    |                     employee    |
|     Expand(All) |            38 |    9 |     10 | anon[64], anon[7], employee    | ()<-[:manages]-(employee)       |
|          Filter |            34 |    1 |    342 |                        anon[7] |  anon[7].uid == {  AUTOSTRING0} |
| NodeByLabelScan |           342 |  342 |    343 |                        anon[7] |                      :User      |
+-----------------+---------------+------+--------+--------------------------------+---------------------------------+

Total database accesses: 695
neo4j-sh (?)$

我从探查器收到以下输出。为什么我在这里获得如此大量的数据库命中?什么可以改变?

char greeting [6] = { 'h','e','l','l','o','\0' };
char greeting [ ] = "hello";

1 个答案:

答案 0 :(得分:1)

您应该在User(uid)上创建索引:

CREATE INDEX ON :User(uid)

或创建唯一性约束(也将创建索引):

CREATE CONSTRAINT ON (u:User) ASSERT u.uid IS UNIQUE

创建索引将启用索引操作而不是NodeByLabelScan的查找,这将更有效。