Qual é a diferença entre usar INDEX vs KEY no MySQL?


191

Eu sei como usar o índice como no código a seguir. E eu sei como usar chave estrangeira e chave primária .

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


No entanto, encontrei um código usando KEY em vez de INDEX da seguinte forma.

...
KEY order_date (order_date) 
...


Não encontrei nenhuma explicação na página oficial do MySQL. Alguém poderia me dizer quais são as diferenças entre KEY e INDEX?

A única diferença que vejo é que, quando uso KEY ..., preciso repetir a palavra, por exemplo
KEY order_date (order_date).

Respostas:


263

Não há diferença. Eles são sinônimos.

A partir da CREATE TABLEentrada manual :

KEYnormalmente é sinônimo de INDEX. O atributo-chave PRIMARY KEYtambém pode ser especificado exatamente KEYquando fornecido em uma definição de coluna. Isso foi implementado para compatibilidade com outros sistemas de banco de dados.


1
Ao examinar as informações da tabela na versão mais recente do SQLYog, ela é exibida KEY keyname (column_name)quando eu criei a tabela INDEX keyname (column_name). O fato de ser sinônimo explica perfeitamente.
fácil

14

Aqui está uma boa descrição sobre a "diferença":

"O MySQL exige que todas as chaves também sejam indexadas, que é um detalhe de implementação específico do MySQL para melhorar o desempenho."


2
A pergunta é sobre o uso dos identificadores SQL KEY e INDEX no MySQL. Não é a diferença entre uma chave e um índice.
Josh J

Procurei a diferença com um mecanismo de pesquisa e este foi o primeiro resultado. Na minha opinião, não há necessidade de abrir uma pergunta extra. Mas fique à vontade para fazê-lo, se quiser.
Stefan


3

Chaves são campos especiais que desempenham papéis muito específicos dentro de uma tabela e o tipo de chave determina seu objetivo dentro da tabela.

Um índice é uma estrutura que o RDBMS (sistema de gerenciamento de banco de dados) fornece para melhorar o processamento de dados. Um índice não tem nada a ver com uma estrutura lógica de banco de dados.

TÃO...

As chaves são estruturas lógicas usadas para identificar registros em uma tabela e os índices são estruturas físicas usadas para otimizar o processamento de dados.

Fonte: Design de banco de dados para meros mortais

Autor: Michael Hernandez


1
A pergunta é sobre o uso dos identificadores SQL KEY e INDEX no MySQL. Não é a diferença entre uma chave e um índice.
Josh J

-1

Uma chave é um conjunto de colunas ou expressões nas quais construímos um índice.

  1. Enquanto um índice é uma estrutura armazenada no banco de dados, as chaves são estritamente um conceito lógico.

  2. O índice nos ajuda a acessar rapidamente um registro, enquanto as chaves apenas identificam os registros exclusivamente.

  3. Toda tabela terá necessariamente uma chave, mas ter um índice não é obrigatório.

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


3
A pergunta é sobre o uso dos identificadores SQL KEY e INDEX no MySQL. Não é a diferença entre uma chave e um índice.
Josh J

1
@ Josh J Mesmo que a motivação original fosse perguntar sobre identificadores, procurar a diferença sobre uma chave e um índice com um mecanismo de pesquisa gera esse tópico. Poderia fazer sentido melhorar o título da pergunta para ser mais específico. Por outro lado, escrever uma pergunta sobre a diferença entre uma chave e um índice no mysql seria possivelmente marcado como duplicado. => Acho essas respostas complementares muito úteis. A resposta "real" obterá a pontuação mais alta, de qualquer maneira. Portanto, não vejo motivo para votos negativos em respostas complementares.
Stefan

Capitalizei INDEX e KEY na questão para deixar isso claro.
reinierpost
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.