MySQL会自动索引外键列吗?
是的,但仅限于innodb.Innodb是目前唯一实现外键的表格格式.
显然,罗伯特发布的链接中指定的索引是自动创建的.
InnoDB需要外键和引用键的索引,以便外键检查可以快速,不需要表扫描.在引用表中,必须有一个索引,其中外键列以相同的顺序列为第一列.如果引用表不存在,则会自动在引用表上创建此索引.(这与一些旧版本形成对比,在旧版本中必须显式创建索引或者外键约束的创建将失败.)如果给定,则使用index_name,如前所述.
InnoDB和FOREIGN KEY约束
是的,请参阅InnoDB和FOREIGN KEY约束.
如果执行ALTER TABLE(而不是CREATE TABLE),则不会自动获取索引,至少根据文档(链接是针对5.1但是5.5的相同):
[...]使用ALTER TABLE向表中添加外键约束时,请记住首先创建所需的索引.
对于那些正在寻找5.7
docs报价的人:
MySQL需要在外键和引用键上建立索引,以便外键检查可以快速进行,而无需进行表扫描。在引用表中,必须有一个索引,其中外键列以相同的顺序列为第一列。如果这样的索引不存在,则会在引用表上自动创建。如果您创建另一个可用于强制外键约束的索引,则以后可能会静默删除该索引。如果给定,则使用index_name(如前所述)。