Indexing 为什么不是';我的Neo4j指数不适用吗?
我运行以下查询:Indexing 为什么不是';我的Neo4j指数不适用吗?,indexing,neo4j,cypher,Indexing,Neo4j,Cypher,我运行以下查询: CREATE INDEX ON :Role(id) +-------------------+ | No data returned. | +-------------------+ Indexes added: 1 CREATE (:Role {id:'abc'}) +-------------------+ | No data returned. | +-------------------+ Nodes created: 1 Properties set: 1 Lab
CREATE INDEX ON :Role(id)
+-------------------+
| No data returned. |
+-------------------+
Indexes added: 1
CREATE (:Role {id:'abc'})
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 1
Properties set: 1
Labels added: 1
接下来,由于某种原因,当我试图获取刚刚创建的角色时,没有使用索引。你能解释一下原因吗
neo4j-sh (?)$ PROFILE MATCH (role:Role {id:'abc'})
> RETURN role.id;
+---------+
| role.id |
+---------+
| "abc" |
+---------+
1 row
7 ms
Compiler CYPHER 2.2
Planner COST
Projection
|
+Filter
|
+NodeByLabelScan
+-----------------+---------------+------+--------+---------------+----------------------------+
| Operator | EstimatedRows | Rows | DbHits | Identifiers | Other |
+-----------------+---------------+------+--------+---------------+----------------------------+
| Projection | 1 | 1 | 1 | role, role.id | role.id |
| Filter | 1 | 1 | 5 | role | role.id == { AUTOSTRING0} |
| NodeByLabelScan | 6 | 5 | 6 | role | :Role |
+-----------------+---------------+------+--------+---------------+----------------------------+
Total database accesses: 12
你忘记使用索引了
试试这个:
MATCH (role:Role)
USING INDEX role:Role(id)
WHERE role.id='abc'
RETURN role.id
Projection
|
+Expand(All)
|
+NodeIndexSeek
Total database accesses: 4
这根本不需要,当节点很少时,查询计划器使用索引或标签扫描没有任何优势。在2.3中,从701个节点开始对标签进行索引扫描