¿Cuál es la diferencia entre usar INDEX vs KEY en MySQL?

193

Sé cómo usar INDEX como en el siguiente código. Y sé cómo usar la clave externa y la clave 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), 
  ....


Sin embargo, encontré un código usando KEY en lugar de INDEX de la siguiente manera.

...
KEY order_date (order_date) 
...


No pude encontrar ninguna explicación en la página oficial de MySQL. ¿Alguien podría decirme cuáles son las diferencias entre KEY e INDEX?

La única diferencia que veo es que cuando uso KEY ..., necesito repetir la palabra, por ejemplo
KEY order_date (order_date).

espinilla
fuente

Respuestas:

264

No hay diferencia Son sinónimos

De la CREATE TABLEentrada manual :

KEYnormalmente es sinónimo de INDEX. El atributo clave PRIMARY KEYtambién se puede especificar como justo KEYcuando se proporciona en una definición de columna. Esto se implementó por compatibilidad con otros sistemas de bases de datos.

nos
fuente
1
Al mirar la información de la tabla en la última versión de SQLYog, se muestra KEY keyname (column_name)cuando creé la tabla con INDEX keyname (column_name). El hecho de que sea sinónimo lo explica perfectamente.
crmpicco
14

Aquí hay una buena descripción sobre la "diferencia":

"MySQL requiere que cada clave también esté indexada, ese es un detalle de implementación específico de MySQL para mejorar el rendimiento".

Stefan
fuente
2
La pregunta es sobre el uso de los identificadores SQL KEY e INDEX en MySQL. No es la diferencia entre una clave y un índice.
Josh J
Busqué la diferencia con un motor de búsqueda y este fue el primer resultado. En mi opinión, no hay necesidad de abrir una pregunta adicional. Pero siéntase libre de hacerlo si lo desea.
Stefan
4

Las claves son campos especiales que juegan roles muy específicos dentro de una tabla, y el tipo de clave determina su propósito dentro de la tabla.

Un índice es una estructura que proporciona RDBMS (sistema de gestión de bases de datos) para mejorar el procesamiento de datos. Un índice no tiene nada que ver con una estructura de base de datos lógica.

ENTONCES...

Las claves son estructuras lógicas que utiliza para identificar registros dentro de una tabla y los índices son estructuras físicas que utiliza para optimizar el procesamiento de datos.

Fuente: Diseño de base de datos para simples mortales

Autor: Michael Hernandez

JayD
fuente
1
La pregunta es sobre el uso de los identificadores SQL KEY e INDEX en MySQL. No es la diferencia entre una clave y un índice.
Josh J
-1

Una clave es un conjunto de columnas o expresiones sobre las cuales construimos un índice.

  1. Mientras que un índice es una estructura que se almacena en la base de datos, las claves son estrictamente un concepto lógico.

  2. Index nos ayuda a acceder rápidamente a un registro, mientras que las teclas solo identifican los registros de manera única.

  3. Cada tabla necesariamente tendrá una clave, pero tener un índice no es obligatorio.

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

Atulya Anand
fuente
3
La pregunta es sobre el uso de los identificadores SQL KEY e INDEX en MySQL. No es la diferencia entre una clave y un índice.
Josh J
1
@Josh J Incluso si la motivación original era preguntar acerca de los identificadores, buscar la diferencia sobre una clave y un índice con un motor de búsqueda genera este tema. Podría tener sentido mejorar el título de la pregunta para ser más específico. Por otro lado, escribir una pregunta sobre la diferencia entre una clave y un índice en mysql posiblemente se marcaría como un duplicado. => Encuentro que tales respuestas complementarias son muy útiles. La respuesta "real" obtendrá la puntuación más alta, de todos modos. Así que no veo una razón para los votos negativos en respuestas complementarias.
Stefan
He capitalizado INDEX y KEY en la pregunta para aclarar esto.
reinierpost