CREATE INDEXindex_name
ONtable_name
(column_name
COLLATE NOCASE ); CREATE UNIQUE INDEXdatabase_name
.index_name
ONtable_name
(col1
,col2
,... );
The CREATE
INDEX
command creates a user-defined index. Upon
creation, the index is populated from the existing table data.
Once created, the index will be automatically maintained, so
that modifications to the referenced table will be reflected in
the index. The query optimizer will automatically consider any
indexes that have been created. Indexes cannot be created on
virtual tables or views.
An index can reference multiple
columns, but all of the columns must be from the same table. In
the case of multicolumn indexes, the index will be built in the
same order as the column listing. For performance-related
indexes, the column ordering can be very important. See Order Matters for more details. The table
must be in the same database as the index. To create an index on
a temporary table, create the index in the temp
database.
If a table is dropped, all
associated indexes are also dropped. A user-defined index may
also be explicitly dropped with the DROP INDEX
command.
If the optional UNIQUE
clause is included, the
index will not allow inclusion of equivalent index entries. An
index entry includes the whole set of indexed columns, taken as
a group, so you may still find duplicate column values in a
unique multicolumn index. As usual, NULL entries are considered
unique from each other, so multiple NULL entries may exist even
in a unique single-column index.
An optional collation can be provided for each column. By default, the column’s native collation will be used. If an alternate collation is provided, the index can only be used in queries that also specify that collation.
Additionally, each indexed column
can specify an ascending (ASC
) or descending (DESC
) sort order. By default, all indexed
columns will be sorted in an ascending order. Use of descending
indexes requires a modern file format. If the database is still
using the legacy file format, descending indexes will not be
supported and the DESC
keyword will be silently ignored.
SQLite indexes include a full copy of the indexed data. Be cautious of your database size when indexing columns that consist of large text or BLOB values. Generally, indexes should only be created on columns that have a relatively unique set of values. If any single value appears in more than 10% to 15% of the rows, an index is usually inadvisable. It is almost always unwise to index a Boolean column, or any similar column that holds relatively few values. There is a cost associated with maintaining indexes, so they should only be created when they serve some purpose.
Creating an index that already
exists will normally generate an error. If the optional IF NOT EXISTS
clause is
provided, this error is silently ignored. This leaves the
original definition (and data) in place.