Indexing
Introduction
Before we begin querying documents, let’s briefly mention the importance of having an appropriate and balanced approach to indexes.
Creating indexes can speed up the performance of queries. A query will typically return results more quickly if it can take advantage of an existing database index to search, narrowing down the set of documents to be examined.
|
Constraints
Couchbase Lite for ios does not currently support partial value indexes; indexes with non-property expressions.
You should only index with properties that you plan to use in the query.
|
Creating a new index
You can use SQL++ or QueryBuilder syntaxes to create an index
Example 2 creates a new index for the type and name properties, shown in this data model:
{
"_id": "hotel123",
"type": "hotel",
"name": "The Michigander",
"overview": "Ideally situated for exploration of the Motor City and the wider state of Michigan. Tripadvisor rated the hotel ...",
"state": "Michigan"
}
N1QL
The code to create the index will look something like this:
let config = ValueIndexConfiguration(["type", "name"])
try database.createIndex(config, name: "TypeNameIndex")
QueryBuilder
The code to create the index will look something like this:
let index = IndexBuilder.valueIndex(items: ValueIndexItem.expression(Expression.property("type")),
ValueIndexItem.expression(Expression.property("name")))
try database.createIndex(index, withName: "TypeNameIndex")
Summary
When planning the indexes you need for your database, remember that while indexes make queries faster, they may also:
-
Make writes slightly slower, because each index must be updated whenever a document is updated
-
Make your Couchbase Lite database slightly larger.
So too many indexes may hurt performance. Optimal performance depends on designing and creating the right indexes to go along with your queries.