为什么profile query向我显示NodeByLabelScan以查找在neo4j中具有唯一约束的属性?
在我的neo4j数据中,我有唯一的约束集为什么profile query向我显示NodeByLabelScan以查找在neo4j中具有唯一约束的属性?,neo4j,cypher,Neo4j,Cypher,在我的neo4j数据中,我有唯一的约束集 neo4j-sh (?)$ schema Indexes ON :Post(uuid) ONLINE (for uniqueness constraint) Constraints ON (post:Post) ASSERT post.uuid IS UNIQUE 然而,当我在查询中创建一个概要文件时,似乎搜索是由NodeByLabelScan完成的 neo4j-sh (?)$ profile match
neo4j-sh (?)$ schema
Indexes
ON :Post(uuid) ONLINE (for uniqueness constraint)
Constraints
ON (post:Post) ASSERT post.uuid IS UNIQUE
然而,当我在查询中创建一个概要文件时,似乎搜索是由NodeByLabelScan完成的
neo4j-sh (?)$ profile match (p:Post {uuid:"503cb957-9da0-490c-808d-48b64a1b1f64"}) return p;
+---+
| p |
+---+
+---+
0 row
12 ms
Compiler CYPHER 2.2
Planner COST
Filter
|
+NodeByLabelScan
+-----------------+---------------+------+--------+-------------+---------------------------+
| Operator | EstimatedRows | Rows | DbHits | Identifiers | Other |
+-----------------+---------------+------+--------+-------------+---------------------------+
| Filter | 1 | 0 | 2 | p | p.uuid == { AUTOSTRING0} |
| NodeByLabelScan | 1 | 1 | 2 | p | :Post |
+-----------------+---------------+------+--------+-------------+---------------------------+
Total database accesses: 4
这里有我遗漏的东西吗
我的neo4j版本是2.2.3。neo4j 2.2引入了基于成本的分析仪。我猜Cypher在这里认为,由于节点数量较少,带过滤的NodeByLabelScan比索引查询更快。数据库中的节点可能太少了。然后标签扫描比索引查找快。实际上我也有同样的问题。当我有大量节点时,运行2个实体的精确查询会运行NodeByLabelScan,而当我有更少的节点时,运行NodeIndexSeek(这似乎与答案相反)。