【问题标题】:What's the difference between using INDEX vs KEY in MySQL?在 MySQL 中使用 INDEX 和 KEY 有什么区别?
【发布时间】:2010-11-26 23:00:25
【问题描述】:

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

【问题讨论】:

    标签: mysql indexing key


    【解决方案1】:

    没有区别。它们是同义词。

    来自the CREATE TABLE manual entry

    KEY 通常是INDEX 的同义词。关键属性PRIMARY KEY可以 当在列定义中给出时,也可以指定为 KEY。这是 实现与其他数据库系统的兼容性。

    【讨论】:

    • 在查看最新版本的 SQLYog 中的表信息时,当我使用 INDEX keyname (column_name) 创建表时,它会显示 KEY keyname (column_name)。它是同义词这一事实完美地解释了这一点。
    • "当在列定义中给出键属性 PRIMARY KEY 时,也可以指定为 KEY。"这是什么意思?
    【解决方案2】:

    在“创建表”文档中,它被称为 INDEX 的同义词: MySQL 5.5 Reference Manual :: 13 SQL Statement Syntax :: 13.1 Data Definition Statements :: 13.1.17 CREATE TABLE Syntax

    @Nos 已经引用了该部分并链接了 5.1 的帮助。

    就像PRIMARY KEY 为你创建一个主键和一个索引, KEY 只创建索引。

    【讨论】:

      【解决方案3】:

      这是nice description关于“差异”的:

      "MySQL 要求每个 Key 也被索引,这是一个实现 特定于 MySQL 的详细信息,以提高性能。”

      【讨论】:

      • 问题是关于MySQL中SQL标识符KEY和INDEX的使用。不是键和索引之间的区别。
      • 我用搜索引擎搜索了差异,这是第一个结果。在我看来,没有必要提出一个额外的问题。但是,如果您愿意,请随意这样做。
      【解决方案4】:

      键是我们构建索引的一组列或表达式。

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

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

      3. 每个表都必须有一个键,但索引不是强制性的。

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

      【讨论】:

      • 问题是关于MySQL中SQL标识符KEY和INDEX的使用。不是键和索引之间的区别。
      • @Josh J 即使最初的动机是询问标识符,使用搜索引擎搜索关于键和索引的差异也会产生这个主题。将问题的标题改进为更具体可能是有意义的。另一方面,在 mysql 中写一个关于键和索引之间差异的问题可能会被标记为重复。 =>我发现这样的补充答案非常有用。无论如何,“真实”的答案将获得最高分。所以我看不出对补充答案投反对票的理由。
      • 我在问题中将 INDEX 和 KEY 大写以说明这一点。
      【解决方案5】:

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

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

      所以...

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

      来源:Mere Mortals 的数据库设计

      作者:迈克尔·埃尔南德斯

      【讨论】:

      • 问题是关于MySQL中SQL标识符KEY和INDEX的使用。不是键和索引之间的区别。
      猜你喜欢
      • 2015-05-11
      • 2023-03-16
      • 2015-11-30
      • 2011-04-20
      • 2014-08-03
      • 2013-06-11
      • 2013-09-22
      • 2012-11-20
      相关资源
      最近更新 更多