我有一个包含大约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";
答案 0 :(得分:1)
您应该在User(uid)
上创建索引:
CREATE INDEX ON :User(uid)
或创建唯一性约束(也将创建索引):
CREATE CONSTRAINT ON (u:User) ASSERT u.uid IS UNIQUE
创建索引将启用索引操作而不是NodeByLabelScan
的查找,这将更有效。