Яка різниця між використанням INDEX та KEY у MySQL?


192

Я знаю, як використовувати 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у документах "Створити таблицю": Довідковий посібник MySQL 5.5 :: 13 Синтаксис операторів SQL :: 13.1 Визначення даних: 13.1.17 Створити синтаксис ТАБЛИЦІ

Носи вже цитували розділ і зв’язували допомогу для 5.1.

Так само 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.