小编Jam*_*all的帖子

为什么在 MySQL 中添加 FK 约束很慢?

我正在 MySQL 5.1.53 中进行一些实验,并且遇到了一个我只是不明白的情况。

CREATE TABLE A (
    `pk` INT(11) NOT NULL,
    `fk` INT(11) NOT NULL,
    PRIMARY KEY `pk_A` (`pk`),
    KEY `idx_fk` (`fk`)
) ENGINE=INNODB;

SET foreign_key_checks=0;

ALTER TABLE `A` ADD FOREIGN KEY `idx_fk` (`fk`) REFERENCES `parent` (`pk`);
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该只会将约束添加到表元数据中以供将来的数据执行,并且应该是 O(1) 操作 - 我们已经使用“SETforeign_key_checks=0”关闭了实际检查约束并且它应该使用 idx_fk 索引(在 ADD FOREIGN KEY 子句中指定 - 可能是多余的),因此它不必创建任何内容或以任何方式迭代数据。

然而,当我运行 ALTER TABLE 时,表越大,该操作就越慢。

它在做什么以及为什么这么慢?

mysql foreign-key optimization

5
推荐指数
1
解决办法
2569
查看次数

标签 统计

foreign-key ×1

mysql ×1

optimization ×1