Qual è la differenza tra l'utilizzo di INDEX vs KEY in MySQL?


193

So usare INDEX come nel seguente codice. E so come usare la chiave esterna e la chiave primaria .

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


Comunque ho trovato un codice usando KEY invece di INDEX come segue.

...
KEY order_date (order_date) 
...


Non ho trovato alcuna spiegazione sulla pagina ufficiale di MySQL. Qualcuno potrebbe dirmi quali sono le differenze tra KEY e INDEX?

L'unica differenza che vedo è che quando uso KEY ..., devo ripetere la parola, ad es
KEY order_date (order_date).

Risposte:


264

Non c'è alcuna differenza. Sono sinonimi.

Da l' CREATE TABLEinserimento manuale :

KEYè normalmente sinonimo di INDEX. L'attributo chiave PRIMARY KEYpuò anche essere specificato come appena KEYdato in una definizione di colonna. Questo è stato implementato per la compatibilità con altri sistemi di database.


1
Quando guardo le informazioni sulla tabella nell'ultima versione di SQLYog, mostra KEY keyname (column_name)quando ho creato la tabella con INDEX keyname (column_name). Il fatto che sia un sinonimo lo spiega perfettamente.
crmpicco,

14

Ecco una bella descrizione della "differenza":

"MySQL richiede che anche ogni chiave sia indicizzata, questo è un dettaglio di implementazione specifico di MySQL per migliorare le prestazioni."


2
La domanda riguarda l'uso degli identificatori SQL KEY e INDEX in MySQL. Non la differenza tra una chiave e un indice.
Josh J,

Ho cercato la differenza con un motore di ricerca e questo è stato il primo risultato. Secondo me non è necessario aprire una domanda in più. Ma sentiti libero di farlo se vuoi.
Stefan


4

Le chiavi sono campi speciali che svolgono ruoli molto specifici all'interno di una tabella e il tipo di chiave determina il suo scopo all'interno della tabella.

Un indice è una struttura fornita da RDBMS (sistema di gestione del database) per migliorare l'elaborazione dei dati. Un indice non ha nulla a che fare con una struttura di database logica.

COSÌ...

Le chiavi sono strutture logiche utilizzate per identificare i record all'interno di una tabella e gli indici sono strutture fisiche utilizzate per ottimizzare l'elaborazione dei dati.

Fonte: Database Design for Mere Mortals

Autore: Michael Hernandez


1
La domanda riguarda l'uso degli identificatori SQL KEY e INDEX in MySQL. Non la differenza tra una chiave e un indice.
Josh J,

-1

Una chiave è un insieme di colonne o espressioni su cui costruiamo un indice.

  1. Mentre un indice è una struttura archiviata nel database, le chiavi sono rigorosamente un concetto logico.

  2. L'indice ci aiuta ad accedere rapidamente a un record, mentre le chiavi identificano in modo univoco i record.

  3. Ogni tabella avrà necessariamente una chiave, ma avere un indice non è obbligatorio.

Controlla su https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT721


3
La domanda riguarda l'uso degli identificatori SQL KEY e INDEX in MySQL. Non la differenza tra una chiave e un indice.
Josh J,

1
@Josh J Anche se la motivazione originale era chiedere informazioni sugli identificatori, cercare la differenza tra una chiave e un indice con un motore di ricerca produce questo argomento. Potrebbe avere senso migliorare il titolo della domanda per essere più specifici. D'altra parte, scrivere una domanda sulla differenza tra una chiave e un indice in mysql potrebbe essere contrassegnato come duplicato. => Trovo queste risposte complementari molto utili. La risposta "reale" otterrà comunque il punteggio più alto. Quindi non vedo un motivo per i voti negativi sulle risposte complementari.
Stefan

Ho messo in maiuscolo INDICE e CHIAVE nella domanda per chiarire questo punto.
reinierpost,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.