Add section on indexing in user documentation

Summary:
The openCypher chapter of user documentation now includes information on
creating label & property index.

Reviewers: florijan, buda

Reviewed By: florijan

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D537
This commit is contained in:
Teon Banek 2017-07-12 10:23:42 +02:00
parent 62987d22e6
commit 514d9d2808
2 changed files with 54 additions and 12 deletions

View File

@ -11,6 +11,7 @@ not yet supported features of the language are listed.
* [Reading existing Data](#reading-existing-data)
* [Writing new Data](#writing-new-data)
* [Reading & Writing](#reading-amp-writing)
* [Indexing](#indexing)
* [Other Features](#other-features)
### Reading existing Data
@ -303,6 +304,54 @@ Example. Set a different properties depending on what `MERGE` did.
For more details, click [this
link](https://neo4j.com/docs/developer-manual/current/cypher/clauses/merge/).
### Indexing
An index stores additional information on certain types of data, so that
retrieving said data becomes more efficient. Downsides of indexing are:
* requiring extra storage for each index and
* slowing down writes to the database.
Carefully choosing which data to index can tremendously improve data retrieval
efficiency, and thus make index downsides negligible.
Memgraph automatically indexes labeled data. This improves queries
which fetch nodes by label:
MATCH (n :Label) ... RETURN n
Indexing can also be applied to data with a specific combination of label and
property. These are not automatically created, instead a user needs to create
them explicitly. Creation is done using a special
`CREATE INDEX ON :Label(property)` language construct.
For example, to index nodes which is labeled as `:Person` and has a property
named `age`:
CREATE INDEX ON :Person(age)
After the index is created, retrieving those nodes will become more efficient.
For example, the following query will retrieve all nodes which have an `age`
property, instead of fetching each `:Person` node and checking whether the
property exists.
MATCH (n :Person {age: 42}) RETURN n
Using index based retrieval also works when filtering labels and properties
with `WHERE`. For example, the same effect as in the previous example can be
done with:
MATCH (n) WHERE n:Person AND n.age = 42 RETURN n
Since the filter inside `WHERE` can contain any kind of an expression, the
expression can be complicated enough so that the index does not get used. We
are continuously improving the recognition of index usage opportunities from a
`WHERE` expression. If there is any suspicion that an index may not be used,
we recommend putting properties and labels inside the `MATCH` pattern.
Currently, once an index is created it cannot be deleted. This feature will be
implemented very soon. The expected syntax for removing an index will be `DROP
INDEX ON :Label(property)`.
### Other Features

View File

@ -14,20 +14,13 @@ will be continually working on improving the performance. This includes:
* memory usage and
* other improvements.
### Indexing by Label-Property
### Label-Property Index Usage Improvements
Currently, all nodes in the database are indexed by their labels (if they have
any). This improves the performance of finding labeled data. We plan to extend
indexing to include combinations of labels and property values. These kinds of
indexes would need to be created on demand, by using a new query language
construct.
Currently, indexing combinations of labels and properties can be created, but
cannot be deleted. We plan to add a new query language construct which will
allow deletion of created indices.
The idea behind label-property indexing is to improve the performance of
finding data, which contains a specific combination of labels and property
values. In addition to finding the exact values, with this mechanism, we will
offer faster retrieving of property values in sorted order.
### Improving openCypher support
### Improving openCypher Support
Although we have implemented the most common features of the openCypher query
language, there are other useful features we are still working on.