为什么profile query向我显示NodeByLabelScan以查找在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数据中,我有唯一的约束集

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(这似乎与答案相反)。