«…Труд избавляет человека от трех великих зол: скуки, порока, нужды…»

СУБД/лекция 6 семестр 2

Материал из Wiki
Перейти к: навигация, поиск

CREATE [UNIQUE|FULLTEXT] INDEX index_name
        ON tbl_name (col_name[(LENGTH)],... )
  • Nuvola apps error.png Команда CREATE INDEX в версиях MySQL до 3.22 не выполняет никаких действий.
  • 200px-Yes check.png В версии 3.22 и более поздних CREATE INDEX соответствует команде ALTER TABLE в части создания индексов.
ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]
alter_specification:
       ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
 или   ADD [COLUMN] (create_definition, create_definition,...)
 или   ADD INDEX [index_name] (index_col_name,...)
 или   ADD PRIMARY KEY (index_col_name,...)
 или   ADD UNIQUE [index_name] (index_col_name,...)
 или   ADD FULLTEXT [index_name] (index_col_name,...)
 или   ADD [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)
           [reference_definition]
 или   ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
 или   CHANGE [COLUMN] old_col_name create_definition
              [FIRST | AFTER column_name]
 или   MODIFY [COLUMN] create_definition [FIRST | AFTER column_name]
 или   DROP [COLUMN] col_name
 или   DROP PRIMARY KEY
 или   DROP INDEX index_name
 или   DISABLE KEYS
 или   ENABLE KEYS
 или   RENAME [TO] new_tbl_name
 или   ORDER BY col
 или   table_options
  • Обычно все индексы создаются в таблице во время создания самой таблицы командой CREATE TABLE.
  • CREATE INDEX дает возможность добавить индексы к существующим таблицам.
  • Список столбцов в форме (col1,col2,...) создает индекс для нескольких столбцов. Величины индексов формируются путем конкатенации величин указанных столбцов.
Для столбцов типов CHAR и VARCHAR с помощью параметра col_name(length) могут создаваться индексы, для которых используется только часть столбца (для столбцов BLOB и TEXT нужно указывать длину). Команда, приведенная ниже, создает индекс, используя первые 10 символов столбца name:
CREATE INDEX part_of_name ON customer (name(10));

Поскольку большинство имен обычно имеют отличия друг от друга в первых 10 символах, данный индекс не должен быть намного медленнее, чем созданный из столбца name целиком. Кроме того, используя неполные столбцы для индексов, можно сделать файл индексов намного меньше, а это позволяет сэкономить место на диске и к тому же повысить скорость операций INSERT!

Bombilla amarilla - yellow Edison lamp.pngСледует учитывать, что в версии MySQL 3.23.2 и более поздних для таблиц типа MyISAM можно добавлять индекс только для столбцов, которые могут принимать величины NULL или для столбцов BLOB/TEXT.