gpt4 book ai didi

mysql删除没有表副本的外键

转载 作者:可可西里 更新时间:2023-11-01 07:02:58 25 4
gpt4 key购买 nike

我有一个 InnoDB 表 claims,它有大约 2.4 亿行。该表有一个外键约束:CONSTRAINT FK78744BD7307102A9 FOREIGN KEY (ID) REFERENCES claim_details (ID)。我想尽快删除表 claim_details

根据一些实验,如果我使用 SET foreign_key_checks = 0; 删除 claim_details 然后重新启用外键,mysql 将继续强制执行约束,即使尽管该表不再存在。所以,我相信我必须从表中删除约束。

我已尝试使用 ALTER TABLE claims DROP FOREIGN KEY FK78744BD7307102A9 来删除约束,查询已处于“复制到 tmp 表”状态超过 24 小时(在具有没有其他负载)。我不明白为什么删除约束需要制作表的副本。有什么办法可以避免这种情况吗?

mysql 版本 5.1.48。

最佳答案

从 MySQL 5.6 开始,MySQL 支持就地删除外键/无需复制。 Oracle 将此称为在线 DDL

table列出所有在线 DDL 操作及其运行时行为。

根据我的经验,在 600GB 的表上删除外键和相应的约束几乎是瞬间完成的。使用 5.5 可能需要几天时间。

我知道的唯一缺点是 5.6 不允许回收表空间。 IE。如果您正在使用 innodb_file_per_table,当您删除索引时该文件不会缩小。只有文件中未使用的数据 会增长。您可以使用 SHOW TABLE STATUS 轻松检查和 Data_free 列。

关于mysql删除没有表副本的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7294298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com