| = Secondary Indexes |
| |
| CQL supports creating secondary indexes on tables, allowing queries on |
| the table to use those indexes. A secondary index is identified by a |
| name defined by: |
| |
| [source,bnf] |
| ---- |
| include::example$BNF/index_name.bnf[] |
| ---- |
| |
| [[create-index-statement]] |
| == CREATE INDEX |
| |
| Creating a secondary index on a table uses the `CREATE INDEX` statement: |
| |
| [source,bnf] |
| ---- |
| include::example$BNF/create_index_statement.bnf[] |
| ---- |
| |
| For instance: |
| |
| [source,cql] |
| ---- |
| include::example$CQL/create_index.cql[] |
| ---- |
| |
| The `CREATE INDEX` statement is used to create a new (automatic) |
| secondary index for a given (existing) column in a given table. A name |
| for the index itself can be specified before the `ON` keyword, if |
| desired. If data already exists for the column, it will be indexed |
| asynchronously. After the index is created, new data for the column is |
| indexed automatically at insertion time. |
| |
| Attempting to create an already existing index will return an error |
| unless the `IF NOT EXISTS` option is used. If it is used, the statement |
| will be a no-op if the index already exists. |
| |
| === Indexes on Map Keys |
| |
| When creating an index on a `maps <maps>`, you may index either the keys |
| or the values. If the column identifier is placed within the `keys()` |
| function, the index will be on the map keys, allowing you to use |
| `CONTAINS KEY` in `WHERE` clauses. Otherwise, the index will be on the |
| map values. |
| |
| [[drop-index-statement]] |
| == DROP INDEX |
| |
| Dropping a secondary index uses the `DROP INDEX` statement: |
| |
| [source,bnf] |
| ---- |
| include::example$BNF/drop_index_statement.bnf[] |
| ---- |
| |
| The `DROP INDEX` statement is used to drop an existing secondary index. |
| The argument of the statement is the index name, which may optionally |
| specify the keyspace of the index. |
| |
| If the index does not exists, the statement will return an error, unless |
| `IF EXISTS` is used in which case the operation is a no-op. |