Spec-Zone.ru › SQLite

СОЗДАТЬ ИНДЕКС

1. Синтаксис

create-index-stmt:

СОЗДАТЬ УНИКАЛЬНЫЙ ИНДЕКС ЕСЛИ НЕ СУЩЕСТВУЕТ имя_схемы . имя_индекса НА имя_таблицы ( колонка_индекса ) , ГДЕ выражение

выражение:

литеральное значение параметр привязки имя схемы . имя таблицы . имя столбца унарный оператор expr expr бинарный оператор expr имя функции ( аргументы функции ) фильтрующее предложение over-clause ( expr ) , CAST ( expr AS имя типа
) expr COLLATE имя_сортировки expr НЕ ПОДОБНО GLOB REGEXP MATCH expr expr ESCAPE expr expr ISNULL NOTNULL НЕ NULL expr ЯВЛЯЕТСЯ НЕ РАЗЛИЧНЫМИ ИЗ expr
expr НЕ МЕЖДУ expr И expr expr НЕ В ( запрос-выбор ) expr , имя-схемы . функция-таблицы ( expr ) имя-таблицы , НЕ СУЩЕСТВУЕТ ( запрос-выбор )
СЛУЧАЙ выражение КОГДА выражение ТОГДА выражение ИНАЧЕ выражение КОНЕЦ функция-возвращаемая

оператор фильтрации:

ФИЛЬТР ( ГДЕ выражение )

аргументы функции:

DISTINCT expr , * ORDER BY ordering-term ,

ordering-term:

expr COLLATE collation-name DESC ASC NULLS FIRST NULLS LAST

literal-value:

CURRENT_TIMESTAMP numeric-literal string-literal blob-literal NULL TRUE FALSE CURRENT_TIME CURRENT_DATE

over-оператор:

ВЕРХНИЙ имя_окна ( имя_базового_окна РАЗДЕЛ ПО выражение , ПОРЯДОК ПО порядок_термин , спецификация_кадра )

спецификация_кадра:

ГРУППЫ МЕЖДУ НЕОГРАНИЧЕННАЯ ПРЕДШЕСТВУЮЩАЯ И НЕОГРАНИЧЕННАЯ СЛЕДУЮЩАЯ ОБЛАСТЬ СТРОКИ НЕОГРАНИЧЕННАЯ ПРЕДШЕСТВУЮЩАЯ expr ПРЕДШЕСТВУЮЩАЯ ТЕКУЩАЯ СТРОКА expr ПРЕДШЕСТВУЮЩАЯ ТЕКУЩАЯ СТРОКА expr СЛЕДУЮЩАЯ expr ПРЕДШЕСТВУЮЩАЯ ТЕКУЩАЯ СТРОКА expr СЛЕДУЮЩАЯ
Исключить Текущий Строка Исключить Группа Исключить Связи Исключить Нет Другие

ordering-term:

expr СОРТИРОВКА имя_сортировки УБЫВАНИЕ ВОЗРАСТАНИЕ Значения NULL первым Значения NULL последним

raise-function:

ПОДНЯТЬ ( ОТМЕНИТЬ , сообщение_ошибки ) ИГНОРИРОВАТЬ ПРЕКРАТИТЬ НЕУДАЧА

запрос:

С РЕКУРСИВНАЯ общий-табличный-выражение , ВЫБРАТЬ УНИКАЛЬНЫЕ столбец-результата , ВСЕ ИЗ таблица-или-подзапрос запрос-соединения , ГДЕ выражение СГРУППИРОВАТЬ ПО выражение ПРИ выражение ,
WINDOW window-name AS window-defn , ЗНАЧЕНИЯ ( expr ) , , составной оператор select-core СОРТИРОВКА ПО ОГРАНИЧЕНИЕ expr элемент_сортировки , СМЕЩЕНИЕ expr , expr

общая_табличная_выражение:

имя_таблицы ( имя_столбца ) КАК НЕ МАТЕРИАЛИЗОВАННЫЙ ( запрос_выбора ) ,

сложный_оператор:

ОБЪЕДИНЕНИЕ ОБЪЕДИНЕНИЕ ПЕРЕСЕЧЕНИЕ ИСКЛЮЧЕНИЕ ВСЕ

запрос_присоединения:

table-or-subquery join-operator table-or-subquery join-constraint

join-constraint:

USING ( column-name ) , ON expr

join-operator:

NATURAL LEFT OUTER JOIN , RIGHT FULL INNER CROSS

ordering-term:

expr COLLATE имя_сортировки ОБРАТНО ВСПЁРЁД NULL ПЕРВЫЙ NULL ПОСЛЕДНИЙ

столбец_результата:

expr КАК псевдоним_столбца * имя_таблицы . *

таблица_или_подзапрос:

schema-name . table-name AS table-alias INDEXED BY index-name NOT INDEXED table-function-name ( expr ) , AS table-alias ( select-stmt ) ( table-or-subquery ) ,
join-clause

window-defn:

( base-window-name PARTITION BY expr , ORDER BY ordering-term , frame-spec )

frame-spec:

ГРУППЫ МЕЖДУ НЕОГРАНИЧЕННЫЕ ПРЕДШЕСТВУЮЩИЕ И НЕОГРАНИЧЕННЫЕ СЛЕДУЮЩИЕ ДИАПАЗОН СТРОКИ НЕОГРАНИЧЕННЫЕ ПРЕДШЕСТВУЮЩИЕ выраж ПРЕДШЕСТВУЮЩИЕ ТЕКУЩИЙ СТРОКА выраж ПРЕДШЕСТВУЮЩИЕ ТЕКУЩИЙ СТРОКА выраж СЛЕДУЮЩИЕ выраж ПРЕДШЕСТВУЮЩИЕ ТЕКУЩИЙ СТРОКА выраж СЛЕДУЮЩИЕ
EXCLUDE CURRENT ROW EXCLUDE GROUP EXCLUDE TIES EXCLUDE NO OTHERS

type-name:

name ( signed-number , signed-number ) ( signed-number )

signed-number:

+ numeric-literal -

indexed-column:

имя_столбца COLLATE имя_сортировки DESC выражение ASC

Команда 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API