Jaka jest różnica między używaniem INDEX a KEY w MySQL?

192

Wiem, jak używać INDEX, jak w poniższym kodzie. I wiem, jak używać klucza obcego i klucza podstawowego .

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), 
  ....


Jednak znalazłem kod używający KEY zamiast INDEX, jak poniżej.

...
KEY order_date (order_date) 
...


Nie mogłem znaleźć żadnego wyjaśnienia na oficjalnej stronie MySQL. Czy ktoś mógłby mi powiedzieć, jakie są różnice między KEY a INDEX?

Jedyną różnicą, którą widzę, jest to, że kiedy używam KEY ..., muszę powtórzyć słowo, np
KEY order_date (order_date).

piszczel
źródło

Odpowiedzi:

264

Nie ma różnicy. Są synonimami.

Od tej CREATE TABLEręcznego wpisu :

KEYjest zwykle synonimem INDEX. Atrybut kluczowy PRIMARY KEYmożna również określić jako tylko KEYpodany w definicji kolumny. Zostało to zaimplementowane w celu zapewnienia zgodności z innymi systemami baz danych.

nos
źródło
1
Podczas przeglądania informacji o tabeli w najnowszej wersji SQLYog pokazuje, KEY keyname (column_name)kiedy utworzyłem tabelę INDEX keyname (column_name). Fakt, że jest to synonim, doskonale to tłumaczy.
crmpicco
14

Oto ładny opis „różnicy”:

„MySQL wymaga również indeksowania każdego klucza, co jest szczegółem implementacji specyficznym dla MySQL w celu zwiększenia wydajności”.

Stefan
źródło
2
Pytanie dotyczy użycia SQL Identyfikatory KEY i INDEX w MySQL. Nie różnica między kluczem a indeksem.
Josh J
Szukałem różnicy w wyszukiwarce i był to pierwszy wynik. Moim zdaniem nie ma potrzeby otwierania dodatkowego pytania. Ale możesz to zrobić, jeśli chcesz.
Stefan
4

Klucze to specjalne pola, które pełnią bardzo określone role w tabeli, a rodzaj klucza określa jego przeznaczenie w tabeli.

Indeks to struktura zapewniana przez RDBMS (system zarządzania bazą danych) w celu usprawnienia przetwarzania danych. Indeks nie ma nic wspólnego z logiczną strukturą bazy danych.

WIĘC...

Klucze to struktury logiczne używane do identyfikacji rekordów w tabeli, a indeksy to struktury fizyczne używane do optymalizacji przetwarzania danych.

Źródło: Projekt bazy danych dla zwykłych śmiertelników

Autor: Michael Hernandez

JayD
źródło
1
Pytanie dotyczy użycia SQL Identyfikatory KEY i INDEX w MySQL. Nie różnica między kluczem a indeksem.
Josh J
-1

Klucz to zestaw kolumn lub wyrażeń, na których budujemy indeks.

  1. Podczas gdy indeks jest strukturą przechowywaną w bazie danych, klucze są ściśle logiczną koncepcją.

  2. Indeks pomaga nam w szybkim dostępie do rekordu, podczas gdy klawisze tylko jednoznacznie identyfikują rekordy.

  3. Każda tabela musi mieć klucz, ale indeks nie jest obowiązkowy.

Sprawdź na https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT721

Atulya Anand
źródło
3
Pytanie dotyczy użycia SQL Identyfikatory KEY i INDEX w MySQL. Nie różnica między kluczem a indeksem.
Josh J
1
@Josh J Nawet jeśli pierwotną motywacją było zapytanie o identyfikatory, poszukiwanie różnicy dotyczącej klucza i indeksu za pomocą wyszukiwarki daje ten temat. Bardziej szczegółowe może być poprawienie tytułu pytania. Z drugiej strony napisanie pytania o różnicę między kluczem a indeksem w mysql byłoby prawdopodobnie oznaczone jako duplikat. => Uważam, że takie uzupełniające odpowiedzi są bardzo przydatne. „Prawdziwa” odpowiedź i tak uzyska najwyższy wynik. Nie widzę więc powodu, aby głosować negatywnie na uzupełniające odpowiedzi.
Stefan
W pytaniu wykorzystałem INDEKS i KLUCZ, aby to wyjaśnić.
reinierpost