MySQL是否自动索引外键列?
是的,参见InnoDB和外键约束。
是的,但只在innodb上。Innodb是目前唯一实现了外键的表格式。
显然,索引是根据罗伯特发布的链接中指定的自动创建的。
InnoDB要求在外键和引用键上建立索引,这样外键检查就可以快速进行,而不需要表扫描。在引用表中,必须有一个索引,其中外键列以相同的顺序列在第一个列中。如果引用表中不存在这样的索引,则会自动在引用表中创建。(这与一些旧版本相反,在旧版本中,索引必须显式创建,否则外键约束的创建将失败。)index_name,如果给定,则使用如上所述。
InnoDB and FOREIGN KEY Constraints . sh
如前所述,它适用于InnoDB。起初,我觉得很奇怪,许多其他的(尤其是MS SQL和DB2)没有。表空间扫描只有在表行很少的情况下才比索引扫描好——所以在绝大多数情况下外键都需要被索引。然后它有点击中我-这并不一定意味着它必须是一个独立的(一列)索引-它是在MySQL的自动FK索引。所以,可能这就是为什么MS SQL, DB2(我不确定Oracle)等把它留给DBA的原因;毕竟,大表上的多个索引会导致性能和空间问题。
如果你执行ALTER TABLE(而不是CREATE TABLE),你不会自动获得索引,至少根据的文档(该链接适用于5.1,但适用于5.5):
[…当您使用ALTER table向表添加外键约束时,请记住首先创建所需的索引。
是的,Innodb提供了这个。你可以在FOREIGN KEY子句后面放一个外键名,或者让MySQL为你创建一个外键名。MySQL自动创建一个名为foreign_key_name的索引。
Innodb
FOREIGN KEY
foreign_key_name
CONSTRAINT constraint_name FOREIGN KEY foreign_key_name (columns) REFERENCES parent_table(columns) ON DELETE action ON UPDATE action
这是不可能得到索引键自动使用
ALTER TABLE (NAME OF THE TABLE) ADD INDEX (FOREIGN KEY)
你创建的表的名称,例如photos和外键,例如photograph_id。代码应该是这样的
photograph_id
ALTER TABLE photographs ADD INDEX (photograph_id);
对于那些正在寻找5.7 文档引用的人:
5.7
MySQL需要在外键和引用键上建立索引 外键检查可以快速且不需要表扫描。在 引用表时,必须有外键所在的索引 列按照相同的顺序作为第一个列列出。这样一个 如果没有,则在引用表上自动创建索引 存在。如果您创建该索引,稍后可能会默默地删除该索引 可用于强制外键约束的另一个索引。 . Index_name,如果给出,则使用如上所述