13.1. Indexes
Cypher allows the creation of indexes over a property for all nodes that have a given label. These indexes are automatically managed and kept up to date by the database whenever the graph is changed.
Create index on a label
To create an index on a property for all nodes that have a label, use CREATE
INDEX
ON
. Note that the index is not immediately available, but will be created in the background. See the section called “Indexes” for details.
Query.
CREATE INDEX ON :Person(name)
Result
Indexes added: 1 |
---|
|
Try this query live. create (_0 {`name`:"A"}) create (_1 {`name`:"root"}) create (_2 {`name`:"B"}) create (_3 {`name`:"C"}) create _0-[:`KNOWS`]->_3 create _1-[:`X`]->_0 create _1-[:`X`]->_2 create _1-[:`X`]->_3 create index on :Person(name)
Drop index on a label
To drop an index on all nodes that have a label, use the DROP
INDEX
clause.
Query.
DROP INDEX ON :Person(name)
Result
Indexes removed: 1 |
---|
|
Try this query live. create (_0 {`name`:"A"}) create (_1 {`name`:"root"}) create (_2 {`name`:"B"}) create (_3 {`name`:"C"}) create _0-[:`KNOWS`]->_3 create _1-[:`X`]->_0 create _1-[:`X`]->_2 create _1-[:`X`]->_3 drop index on :Person(name)
Use index
There is usually no need to specify which indexes to use in a query, Cypher will figure that out by itself. For example the query below will use the Person(name)
index, if it exists. If you for some reason want to hint to specific indexes, see Section 9.7, “Using”.
Query.
MATCH (n:Person { name: 'Andres' }) RETURN n
Result
n |
---|
0 row |
|
Try this query live. create (_0 {`name`:"A"}) create (_1 {`name`:"root"}) create (_2 {`name`:"B"}) create (_3 {`name`:"C"}) create _0-[:`KNOWS`]->_3 create _1-[:`X`]->_0 create _1-[:`X`]->_2 create _1-[:`X`]->_3 match (n:Person {name: 'Andres'}) return n