在MySQL中使用INDEX与KEY有什么区别?


191

我知道如何在以下代码中使用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)

Answers:


263

没有区别 它们是同义词。

CREATE TABLE手动输入

KEY通常是的同义词INDEXPRIMARY KEY也可以像KEY在列定义中给定键属性一样指定键属性。这样做是为了与其他数据库系统兼容。


1
在最新版本的SQLYog中查看表信息时,它显示了KEY keyname (column_name)我使用创建表的时间INDEX keyname (column_name)。它是同义词的事实完美地说明了这一点。
crmpicco 2014年

14

这是有关“差异”的一个很好的描述

“ MySQL要求还对每个键进行索引,这是特定于MySQL的实现细节,以提高性能。”


2
问题是关于在MySQL中使用SQL标识符KEY和INDEX。键和索引之间没有区别。
乔什

我用搜索引擎搜索了差异,这是第一个结果。我认为没有必要再提出一个额外的问题。但是,如果您愿意,可以随时这样做。
Stefan


3

键是在表中扮演非常特定角色的特殊字段,键的类型决定了它在表中的用途。

索引是RDBMS(数据库管理系统)提供的用于改进数据处理的结构。索引与逻辑数据库结构无关。

所以...

键是用于标识表中记录的逻辑结构,索引是用于优化数据处理的物理结构。

资料来源:仅凡人的数据库设计

作者:Michael Hernandez


1
问题是关于在MySQL中使用SQL标识符KEY和INDEX。键和索引之间没有区别。
乔什

-1

键是我们在其上建立索引的一组列或表达式。

  1. 虽然索引是存储在数据库中的结构,但是键严格来说是逻辑概念。

  2. 索引可帮助我们快速访问记录,而键只是唯一地标识记录。

  3. 每个表都必须有一个键,但不是必须具有索引。

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


3
问题是关于在MySQL中使用SQL标识符KEY和INDEX。键和索引之间没有区别。
乔什

1
@Josh J即使最初的动机是询问标识符,但使用搜索引擎搜索有关键和索引的差异也会产生此主题。将问题的标题更具体些可能是有意义的。另一方面,在mysql中编写有关键和索引之间差异的问题可能会被标记为重复。=>我发现这样的补充答案非常有用。无论如何,“真实”答案将获得最高分。因此,我看不出对补充答案投反对票的理由。
Stefan '18

我在问题中使用了大写的INDEX和KEY来阐明这一点。
reinierpost
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.