1

谁能告诉我 MySQL 是否自动为其外键建立索引?

我的 MySQL 正在使用 MyIsam 引擎。

4

2 回答 2

6

MyISAM 根本不支持外键。从手册

对于 InnoDB 以外的存储引擎,MySQL Server 解析 CREATE TABLE 语句中的 FOREIGN KEY 语法,但不使用或存储它。...在稍后阶段,还将为 MyISAM 表实现外键约束。

这是针对 MySQL 5.6 的下一个版本,所以还没有实现。旧版本的文本完全相同。

这意味着根本不使用外键结构。您可以在CREATE TABLE命令中指定它,但 MySQL 会默默地忽略它。不会从中创建索引,也不会存储它(因此SHOW CREATE TABLE命令不会显示您尝试创建外键)。

如果您需要外键支持,请考虑使用 InnoDB 存储引擎。InnoDB自动为外键创建索引。

于 2012-06-28T13:05:04.410 回答
1

MyISAM 引擎不支持外键,只支持 InnoDB 引擎:

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

InnoDB 需要外键和引用键上的索引,以便外键检查可以快速且不需要表扫描。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。如果引用表不存在,则会在引用表上自动创建此类索引。如果您创建另一个可用于强制外键约束的索引,则此索引可能会在稍后被静默删除。index_name,如果给定,如前所述使用。

于 2012-06-28T13:05:46.997 回答