Spec-Zone .ru
спецификации, руководства, описания, API
|
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEXindex_name
[index_type
] ONtbl_name
(index_col_name
,...) [algorithm_option
|lock_option
] ...index_col_name
:col_name
[(length
)] [ASC | DESC]index_type
: USING {BTREE | HASH}index_option
: KEY_BLOCK_SIZE [=]value
|index_type
| WITH PARSERparser_name
| COMMENT 'string
'algorithm_option
: ALGORITHM [=] {DEFAULT|INPLACE|COPY}lock_option
: LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
CREATE
INDEX
отображается на ALTER TABLE
оператор, чтобы создать индексирует. См. Раздел 13.1.7,"ALTER TABLE
Синтаксис". CREATE INDEX
не может использоваться, чтобы создать a PRIMARY
KEY
; использовать ALTER TABLE
вместо этого. Для получения дополнительной информации об индексирует, см. Раздел
8.3.1, "Использование MySQL How Индексирует".
Обычно, Вы создаете, все индексирует на таблице в то время, когда таблица составляется с CREATE TABLE
. См. Раздел
13.1.17,"CREATE TABLE
Синтаксис". Эта направляющая линия особенно
важна для InnoDB
таблицы, где первичный ключ определяет физическое расположение
строк в файле данных. CREATE INDEX
включает Вы, чтобы добавить индексируете к существующим таблицам.
Список столбцов формы (col1,col2,...)
создает многократный столбец, индексируют.
Индексируйте значения ключа, формируются, связывая значения данных столбцов.
Индексирует может быть создан, которые используют только ведущую роль значений столбцов, используя
синтаксис, чтобы определить индексировать длину
префикса:col_name
(length
)
Префиксы могут быть определены для CHAR
, VARCHAR
, BINARY
, и VARBINARY
столбцы.
BLOB
и TEXT
столбцы также могут быть индексированы, но длина префикса должна
быть дана.
Длины префикса даются в символах для типов недвоичной строки и в байтах для типов
двоичной строки. Таким образом, элементы индекса состоят из первого length
символы каждого значения столбца для CHAR
, VARCHAR
, и TEXT
столбцы, и первое length
байты каждого значения столбца для BINARY
, VARBINARY
, и BLOB
столбцы.
Для пространственных столбцов префиксные значения не могут быть даны, как описано позже в этом разделе.
Оператор, показанный здесь, создает индексировать использование первых 10 символов name
столбец:
CREATE INDEX part_of_name ON customer (name(10));
Если имена в столбце обычно отличаются по первым 10 символам, это индексирует, не должно быть намного медленнее
чем индексирование создаваемого изо всего name
столбец. Кроме того, использование
префиксов столбца для индексирует, может сделать индексный файл намного меньшим, который мог сохранить большое
дисковое пространство и мог бы также убыстриться INSERT
операции.
Префиксная поддержка и длины префиксов (где поддерживающийся) являются зависимым механизмом хранения. Например,
префикс может составить до 1000 байтов, жаждут MyISAM
таблицы, и 767 байтов для
InnoDB
таблицы.
Префиксные пределы измеряются в байтах, тогда как длина префикса в CREATE INDEX
операторы интерпретируются как число символов для недвоичных
типов данных (CHAR
, VARCHAR
, TEXT
). Примите это во внимание, определяя длину префикса для столбца,
который использует многобайтовый набор символов.
A UNIQUE
индексируйте создает ограничение так, что, все значения в индексировании
должны быть отличными. Ошибка происходит, если Вы пытаетесь добавить новую строку со значением ключа, которое
соответствует существующую строку. Для всех механизмов, a UNIQUE
индексируйте
многократные разрешения NULL
значения для столбцов, которые могут содержать NULL
. Если Вы определяете префиксное значение для столбца в a UNIQUE
индексируйте, значения столбцов должны быть уникальными в пределах
префикса.
FULLTEXT
индексирует поддерживаются только для InnoDB
и MyISAM
таблицы и могут включать только CHAR
, VARCHAR
, и TEXT
столбцы. Индексация всегда происходит по всему столбцу; индексация префикса
столбца не поддерживается, и любая длина префикса игнорируется если определено. См. Раздел
12.9, "Полнотекстовые Функции Поиска", для деталей работы.
MyISAM
, InnoDB
, NDB
, и ARCHIVE
механизмы хранения поддерживают
пространственные столбцы такой как (POINT
и GEOMETRY
.
(Раздел 12.18, "Пространственные
Расширения", описывает пространственные типы данных.) Однако, поддержка пространственной индексации
столбца изменяется среди механизмов. Пространственный и непространственный индексирует, доступны согласно
следующим правилам.
Пространственный индексирует (создаваемое использование SPATIAL INDEX
) имейте эти
характеристики:
Доступный только для MyISAM
таблицы. Определение SPATIAL INDEX
для другого хранения механизмы приводит к ошибке.
Индексированные столбцы должны быть NOT NULL
.
В MySQL 5.6 запрещаются длины префикса столбца. Полный width каждого столбца индексируется.
Характеристики непространственных индексируют (создаваемый с INDEX
, UNIQUE
, или PRIMARY KEY
):
Разрешенный для любого механизма хранения, который поддерживает пространственные
столбцы кроме ARCHIVE
.
Столбцы могут быть NULL
если индексирование не
является первичным ключом.
Для каждого пространственного столбца в не -SPATIAL
индексируйте кроме POINT
столбцы, длина префикса столбца должна быть
определена. (Это - то же самое требование что касается индексированного BLOB
столбцы.) Длина префикса дается в байтах.
Индексировать тип для не -SPATIAL
индексируйте зависит
от механизма хранения. В настоящий момент B-дерево используется.
В MySQL 5.6:
Можно добавить индексирование на столбце, который может иметь NULL
значения, только если Вы используете InnoDB
, MyISAM
,
или MEMORY
механизм
хранения.
Можно добавить индексирование на a BLOB
или TEXT
столбец, только если Вы используете InnoDB
или MyISAM
механизм хранения.
Когда innodb_stats_persistent
установка включается, выполняется ANALYZE TABLE
оператор для InnoDB
таблица
после создания индексирования на той таблице.
index_col_name
спецификация может закончиться ASC
или DESC
. Эти ключевые слова разрешаются для будущих
расширений для того, чтобы определить, что возрастание или убывание индексируют хранение значения. В настоящий
момент они анализируются, но игнорируются; индексируйте значения, всегда сохранены в порядке возрастания.
После индексировать списка столбцов индексируйте опции, может быть дан. index_option
значение может быть любым следующим:
KEY_BLOCK_SIZE [=]
value
Для сжатого InnoDB
таблицы, дополнительно определяет размер в байтах, чтобы
использовать для страниц. Значение
обрабатывается как подсказка; различный размер мог использоваться в случае необходимости. Значение 0
представляет значение по умолчанию сжатый размер страницы. См. Раздел
5.4.6, "Работающий с InnoDB
Сжатые Таблицы" для
деталей использования.
Oracle рекомендует включить innodb_strict_mode
при использовании KEY_BLOCK_SIZE
пункт для InnoDB
таблицы. См. Раздел
14.2.5.7,"InnoDB
Строгий Режим" для деталей.
index_type
Некоторые механизмы хранения разрешают Вам определять индексировать тип, создавая индексирование. Допустимые индексируют значения типа, поддерживаемые различными механизмами хранения, показываются в следующей таблице. Где кратное число индексируйте типы, перечисляются, первый является значением по умолчанию, когда не индексируют спецификатор типа, дается.
Механизм хранения | Допустимый Индексируют Типы |
---|---|
InnoDB |
BTREE |
MyISAM |
BTREE |
MEMORY /HEAP |
HASH , BTREE |
NDB |
HASH , BTREE (см. примечание в
тексте),
|
Пример:
CREATE TABLE lookup (id INT) ENGINE = MEMORY;CREATE INDEX id_index ON lookup (id) USING BTREE;
BTREE
индексирует реализуются NDBCLUSTER
механизм хранения как T-древовидные-индексы.
Для индексирует на NDB
столбцы таблицы, USING
опция может быть определена только для
уникального индекса или первичного ключа. USING HASH
предотвращает
создание упорядоченного неявного, индексируют; иначе, создавая уникальный индекс или первичный
ключ на NDB
таблица автоматически приводит к созданию и упорядоченного, индексируют и хеш, индексируют,
каждый из которых индексирует тот же самый набор столбцов.
Это означает что запрос, используя уникальный индекс или первичный ключ на a NULL
столбец всегда обрабатывается NDB
с полным сканированием таблицы. В частности если Вы
планируете использовать IS NULL
или IS NOT
NULL
условие, включающее столбец уникального индекса или первичного ключа NDB
таблица, следует создать любой такой индексировать без
USING HASH
.
index_type
пункт не может использоваться вместе с SPATIAL INDEX
.
Если Вы определяете индексировать тип, который не допустим для данного механизма хранения, но есть,
другой индексирует тип, доступный, который механизм может использовать, не влияя на результаты
запроса, механизм использует доступный тип. Синтаксический анализатор распознает RTREE
как имя типа, но в настоящий момент это не может быть
определено ни для какого механизма хранения.
Использование этой опции перед ON
пункт осуждается; поддержка использования
опции в этой позиции будет удалена в будущем выпуске MySQL. Если tbl_name
index_type
опция дается и в ранее и в более поздние позиции, заключительная опция применяется.
TYPE
распознается
как синоним за type_name
USING
. Однако, type_name
USING
привилегированная форма.
WITH PARSER
parser_name
Эта опция может использоваться только с FULLTEXT
индексирует. Это
связывает плагин синтаксического анализатора с индексированием, если полнотекстовая индексация и
поиск операций нуждаются в специальной обработке. См. Раздел
23.2, "API MySQL Plugin", для деталей о создании плагинов.
COMMENT '
string
'
Индексируйте определения, может включать дополнительный комментарий до 1024 символов.
С MySQL 5.6.6, ALGORITHM
и LOCK
пункты могут быть
даны. Они влияют на табличный метод копирования и уровень параллелизма для чтения и записи таблицы, в то время
как индексирует, изменяются. У них есть то же самое значение что касается ALTER TABLE
оператор. Для получения дополнительной информации см. Раздел
13.1.7,"ALTER TABLE
Синтаксис"