В чем разница между использованием INDEX против KEY в MySQL?


193

Я знаю, как использовать INDEX, как в следующем коде. И я знаю, как использовать внешний ключ и первичный ключ .

CREATE TABLE tasks ( 
  task_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
  parent_id INT UNSIGNED NOT NULL DEFAULT 0, 
  task VARCHAR(100) NOT NULL, 
  date_added TIMESTAMP NOT NULL, 
  date_completed TIMESTAMP, 
  PRIMARY KEY (task_id), 
  INDEX parent (parent_id), 
  ....


Однако я нашел код, использующий KEY вместо INDEX, как показано ниже.

...
KEY order_date (order_date) 
...


Я не смог найти никакого объяснения на официальной странице MySQL. Может кто-нибудь сказать мне, в чем разница между KEY и INDEX?

Единственное отличие, которое я вижу, состоит в том, что когда я использую KEY ..., мне нужно повторить слово, например
KEY order_date (order_date).

Ответы:


264

Там нет разницы. Это синонимы.

Из за CREATE TABLEручной ввод :

KEYобычно является синонимом для INDEX. Атрибут ключа PRIMARY KEYтакже может быть указан так же, KEYкак и в определении столбца. Это было реализовано для совместимости с другими системами баз данных.


1
При просмотре информации о таблице в последней версии SQLYog она показывает, KEY keyname (column_name)когда я создавал таблицу с помощью INDEX keyname (column_name). Тот факт, что это синоним, прекрасно объясняет это.
crmpicco

14

Вот хорошее описание о «разнице»:

«MySQL требует, чтобы каждый ключ также был проиндексирован, это особенность реализации, специфичная для MySQL для повышения производительности».


2
Вопрос об использовании идентификаторов SQL KEY и INDEX в MySQL. Не разница между ключом и индексом.
Josh J

Я искал разницу с поисковой системой, и это был первый результат. На мой взгляд, нет необходимости открывать дополнительный вопрос. Но не стесняйтесь делать это, если хотите.
Стефан

5

Он упоминается как синоним для документов INDEX'create table': Справочное руководство по MySQL 5.5 :: 13 Синтаксис операторов SQL :: 13.1 Операторы определения данных :: 13.1.17 Синтаксис CREATE TABLE

Нос уже процитировал раздел и связал справку для 5.1.

Like PRIMARY KEYсоздает первичный ключ и индекс для вас, KEYсоздает только индекс.


4

Ключи - это специальные поля, которые играют очень специфические роли в таблице, а тип ключа определяет его назначение в таблице.

Индекс - это структура, которую RDBMS (система управления базами данных) предоставляет для улучшения обработки данных. Индекс не имеет ничего общего с логической структурой базы данных.

ТАК...

Ключи - это логические структуры, которые вы используете для идентификации записей в таблице, а индексы - это физические структуры, которые вы используете для оптимизации обработки данных.

Источник: Дизайн базы данных для простых смертных

Автор: Майкл Эрнандес


1
Вопрос об использовании идентификаторов SQL KEY и INDEX в MySQL. Не разница между ключом и индексом.
Josh J

-1

Ключ - это набор столбцов или выражений, по которым мы строим индекс.

  1. Хотя индекс - это структура, которая хранится в базе данных, ключи являются строго логическим понятием.

  2. Индекс помогает нам в быстром доступе к записи, тогда как ключи просто однозначно идентифицируют записи.

  3. У каждой таблицы обязательно будет ключ, но наличие индекса не обязательно.

Проверьте https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT721


3
Вопрос об использовании идентификаторов SQL KEY и INDEX в MySQL. Не разница между ключом и индексом.
Josh J

1
@Josh J Даже если оригинальная мотивация заключалась в том, чтобы спрашивать об идентификаторах, поиск разницы о ключе и индексе с помощью поисковой системы приводит к этой теме. Возможно, имеет смысл улучшить название вопроса, чтобы оно было более конкретным. С другой стороны, написание вопроса о разнице между ключом и индексом в mysql возможно будет помечено как дубликат. => Я считаю такие дополнительные ответы очень полезными. В любом случае, «реальный» ответ получит самый высокий балл. Поэтому я не вижу причин для отрицательных голосов на дополнительные ответы.
Стефан

В этом вопросе я прописал INDEX и KEY, чтобы прояснить это.
reinierpost
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.