2016-06-10 1 views
2

나는 다음과 같은 쿼리를 실행 : 내가 방금 만든 Role를 가져 오기 할 때Neo4j 색인이 왜 적용되지 않습니까?

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 

답변

1

색인을 사용하는 것을 잊었습니다.

이 시도 :

MATCH (role:Role) 
USING INDEX role:Role(id) 
WHERE role.id='abc' 
RETURN role.id 

Projection 
    | 
    +Expand(All) 
    | 
    +NodeIndexSeek 
Total database accesses: 4 
+0

나는 완전히 그 옵션에 대해 잊고, 감사합니다! –

+2

이것은 필요하지 않습니다. 노드가 거의없는 경우 쿼리 플래너가 인덱스 또는 레이블 스캔을 사용하는 이점이 없습니다. 레이블에서 701 노드부터 시작하여 2.3 색인 스캔이 사용되었습니다. –

관련 문제