2016-06-10 2 views
2

я бегу следующие вопросы:Почему мой индекс 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 

И дальше, по какой-то причине, индекс не используется, когда я пытаюсь принести Role, что я только что создали. Можете ли вы объяснить, почему?

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

Этого не требуется вообще, когда у вас мало узлов, для планировщика запросов нет преимущества использования индекса или проверки метки. В 2.3 использовалось сканирование индекса, начиная с 701 узла для метки –

Смежные вопросы