СОЗДАНИЕ ИНДЕКСА
Синтаксис
CREATE [OR REPLACE] [UNIQUE|FULLTEXT|SPATIAL] INDEX
[IF NOT EXISTS] index_name
[index_type]
ON tbl_name (index_col_name,...)
[WAIT n | NOWAIT]
[index_option]
[algorithm_option | lock_option] ...
index_col_name:
col_name [(length)] [ASC | DESC]
index_type:
USING {BTREE | HASH | RTREE}
index_option:
[ KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT 'string'
| CLUSTERING={YES| NO} ]
[ IGNORED | NOT IGNORED ]
algorithm_option:
ALGORITHM [=] {DEFAULT|INPLACE|COPY|NOCOPY|INSTANT}
lock_option:
LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
Описание
Оператор CREATE INDEX используется для добавления индексов к таблице. Индексы можно создать одновременно с таблицей, используя оператор [[|create-table|СОЗДАНИЕ ТАБЛИЦЫ]]. В некоторых случаях, например, для первичных ключей InnoDB, это предпочтительнее, так как добавление первичного ключа потребует перестроения таблицы.
Оператор преобразуется в оператор ALTER TABLE для создания индексов. См. ALTER TABLE. CREATE INDEX нельзя использовать для создания PRIMARY KEY; используйте ALTER TABLE вместо этого.
Если другая подключение использует таблицу, активна блокировка метаданных, и этот оператор будет ожидать освобождения блокировки. Это также верно для нетранзакционных таблиц.
Другим сокращением, DROP INDEX, является удаление индекса.
Для допустимых идентификаторов, которые можно использовать в качестве имен индексов, см. Имена идентификаторов.
Обратите внимание, что KEY_BLOCK_SIZE в настоящее время игнорируется в CREATE INDEX, хотя он включен в вывод SHOW CREATE TABLE.
Права
Выполнение оператора CREATE INDEX требует права INDEX на таблицу или базу данных.
Online DDL
Поддерживается Online DDL с помощью положений ALGORITHM и LOCK.
См. Обзор Online DDL InnoDB для получения дополнительной информации об Online DDL с InnoDB.
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ИНДЕКС
Если используется OR REPLACE предложение, и если индекс уже существует, вместо возврата ошибки сервер удалит существующий индекс и заменит его вновь определённым индексом.
СОЗДАТЬ ИНДЕКС, ЕСЛИ ОН НЕ СУЩЕСТВУЕТ
Если используется IF NOT EXISTS предложение, то индекс будет создан только в том случае, если индекс с таким же именем ещё не существует. Если индекс уже существует, по умолчанию будет сгенерировано предупреждение.
Определения индексов
См. CREATE TABLE: Определения индексов для информации об определениях индексов.
WAIT/NOWAIT
Установите таймаут ожидания блокировки. См. WAIT и NOWAIT.
ALGORITHM
См. ALTER TABLE: ALGORITHM для получения дополнительной информации.
LOCK
См. ALTER TABLE: LOCK для получения дополнительной информации.
Отчет о прогрессе
MariaDB предоставляет отчет о прогрессе для оператора CREATE INDEX для клиентов, которые поддерживают новый протокол отчёта о прогрессе. Например, если вы использовали клиент mariadb, то отчет о прогрессе может выглядеть так::
CREATE INDEX i ON tab (num); Stage: 1 of 2 'copy to tmp table' 46% of stage
Отчет о прогрессе также отображается в выводе оператора SHOW PROCESSLIST и в содержании таблицы information_schema.PROCESSLIST.
См. Отчёт о прогрессе для получения дополнительной информации.
WITHOUT OVERLAPS
Положение WITHOUT OVERLAPS позволяет ограничить первичный или уникальный индекс таким образом, что интервалы времени приложения не могут перекрываться.
Примеры
Создание уникального индекса:
CREATE UNIQUE INDEX HomePhone ON Employees(Home_Phone);
ИЛИ ЗАМЕНА и ЕСЛИ НЕ СУЩЕСТВУЕТ:
CREATE INDEX xi ON xx5 (x); Query OK, 0 rows affected (0.03 sec) CREATE INDEX xi ON xx5 (x); ERROR 1061 (42000): Duplicate key name 'xi' CREATE OR REPLACE INDEX xi ON xx5 (x); Query OK, 0 rows affected (0.03 sec) CREATE INDEX IF NOT EXISTS xi ON xx5 (x); Query OK, 0 rows affected, 1 warning (0.00 sec) SHOW WARNINGS; +-------+------+-------------------------+ | Level | Code | Message | +-------+------+-------------------------+ | Note | 1061 | Duplicate key name 'xi' | +-------+------+-------------------------+
Начиная с MariaDB 10.5.3, создание уникального индекса для таблицы интервалов времени приложения с ограничением WITHOUT OVERLAPS:
CREATE UNIQUE INDEX u ON rooms (room_number, p WITHOUT OVERLAPS);
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/create-index/