谁能告诉我 MySQL 是否自动为其外键建立索引?
我的 MySQL 正在使用 MyIsam 引擎。
MyISAM 根本不支持外键。从手册:
对于 InnoDB 以外的存储引擎,MySQL Server 解析 CREATE TABLE 语句中的 FOREIGN KEY 语法,但不使用或存储它。...在稍后阶段,还将为 MyISAM 表实现外键约束。
这是针对 MySQL 5.6 的下一个版本,所以还没有实现。旧版本的文本完全相同。
这意味着根本不使用外键结构。您可以在CREATE TABLE
命令中指定它,但 MySQL 会默默地忽略它。不会从中创建索引,也不会存储它(因此SHOW CREATE TABLE
命令不会显示您尝试创建外键)。
如果您需要外键支持,请考虑使用 InnoDB 存储引擎。InnoDB自动为外键创建索引。
MyISAM 引擎不支持外键,只支持 InnoDB 引擎:
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
InnoDB 需要外键和引用键上的索引,以便外键检查可以快速且不需要表扫描。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。如果引用表不存在,则会在引用表上自动创建此类索引。如果您创建另一个可用于强制外键约束的索引,则此索引可能会在稍后被静默删除。index_name,如果给定,如前所述使用。