【发布时间】:2012-06-28 13:02:50
【问题描述】:
谁能告诉我 MySQL 是否自动为其外键建立索引?
我的 MySQL 正在使用 MyIsam 引擎。
【问题讨论】:
-
MyISAM 不支持外键约束。
标签: mysql indexing foreign-keys myisam isam
谁能告诉我 MySQL 是否自动为其外键建立索引?
我的 MySQL 正在使用 MyIsam 引擎。
【问题讨论】:
标签: mysql indexing foreign-keys myisam isam
MyISAM 根本不支持外键。来自manual:
对于 InnoDB 以外的存储引擎,MySQL Server 解析 FOREIGN CREATE TABLE 语句中的 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,如果给定,则如前所述使用。
【讨论】: