Spec-Zone.ru › MariaDB

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

Синтаксис

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

MariaDB начиная с 10.5.3

Положение 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);

См. также

  • Имена идентификаторов
  • Начало работы с индексами
  • Что такое индекс?
  • ALTER TABLE
  • DROP INDEX
  • SHOW INDEX
  • SPATIAL INDEX
  • Индексы полнотекстового поиска
  • WITHOUT OVERLAPS
  • Игнорируемые индексы
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

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