СОЗДАТЬ ИНДЕКС
1. Синтаксис
Команда CREATE INDEX состоит из ключевых слов "CREATE INDEX", за которыми следует имя нового индекса, ключевое слово "ON", имя ранее созданной таблицы, которая должна быть индексирована, и заключённый в скобки список имён столбцов таблицы и/или выражений, используемых в качестве ключа индекса. Если включён необязательный оператор WHERE, то индекс является "частичным индексом".
Если необязательный оператор IF NOT EXISTS присутствует и другой индекс с тем же именем уже существует, то эта команда становится бесполезной.
Нет никаких произвольных ограничений на количество индексов, которые могут быть присоединены к одной таблице. Количество столбцов в индексе ограничено значением, заданным sqlite3_limit(SQLITE_LIMIT_COLUMN,...).
Индексы удаляются с помощью команды DROP INDEX.
1.1. Уникальные индексы
Если ключевое слово UNIQUE появляется между CREATE и INDEX, то дублирование записей индекса не допускается. Любая попытка вставить дублированную запись приведёт к ошибке.
Для целей уникальных индексов все значения NULL считаются различными от всех остальных значений NULL и, следовательно, уникальными. Это одно из двух возможных толкований стандарта SQL-92 (язык в стандарте неоднозначен). Толкование, используемое SQLite, такое же, как и в PostgreSQL, MySQL, Firebird и Oracle. Informix и Microsoft SQL Server следуют другому толкованию стандарта, в котором все значения NULL равны друг другу.
1.2. Индексы по выражениям
Выражения в индексе не могут ссылаться на другие таблицы и не могут использовать подзапросы или функции, результат которых может изменяться (например: random() или sqlite_version()). Выражения в индексе могут ссылаться только на столбцы в таблице, которая индексируется. Индексы по выражениям не будут работать с версиями SQLite, предшествующими версии 3.9.0 (14 октября 2015 года). Дополнительную информацию об использовании общих выражений в операторах CREATE INDEX см. в документе Индексы по выражениям.
1.3. Индексы с убыванием
Каждое имя столбца или выражение может быть дополнено одним из ключевых слов "ASC" или "DESC" для указания порядка сортировки. Порядок сортировки может быть или не быть проигнорирован в зависимости от формата файла базы данных, и, в частности, от номера формата схемы. Формат схемы «legacy» (1) игнорирует порядок сортировки индекса. Формат схемы индекса с убыванием (4) учитывает порядок сортировки индекса. Только версии SQLite 3.3.0 (11 января 2006 года) и более поздние версии способны понимать формат индекса с убыванием. Для совместимости версии SQLite между 3.3.0 и 3.7.9 по умолчанию используют формат legacy. Более новый формат схемы используется по умолчанию в версии 3.7.10 (16 января 2012 года) и более поздних. Предикат legacy_file_format pragma может быть использован для изменения определённого поведения для любой версии SQLite.
1.4. NULLS FIRST и NULLS LAST
Предикаты NULLS FIRST и NULLS LAST не поддерживаются для индексов. Для целей сортировки SQLite рассматривает значения NULL как меньшие, чем все другие значения. Поэтому значения NULL всегда появляются в начале ASC индекса и в конце DESC индекса.
1.5. Сортировки
Оператор COLLATE, необязательно следующий за каждым именем столбца или выражением, определяет последовательность сортировки, используемую для текстовых записей в этом столбце. По умолчанию используется последовательность сортировки, определённая для этого столбца в операторе CREATE TABLE. Или, если последовательность сортировки не определена, используется встроенная последовательность сортировки BINARY.
SQLite is in the Public Domain.
https://sqlite.org/lang_createindex.html