gpt4 book ai didi

mysql - 将分区的 MRG_MYISAM 表转换为 Innodb

转载 作者:行者123 更新时间:2023-11-29 09:50:58 26 4
gpt4 key购买 nike

我想将一个拥有超过 1.1 亿行(大约 60 个分区表)的分区 MYISAM 表 (MRG_MYISAM) 转换为 Innodb。

有安全的方法吗? (例如更改表......)

或者我应该准备一个转储(这将需要 10G 的磁盘,并且可能永远不会完成)

最佳答案

我尝试了此页面上的示例 MERGE 表:https://dev.mysql.com/doc/refman/5.5/en/merge-storage-engine.html

CREATE TABLE `total` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`message` char(20) DEFAULT NULL,
KEY `a` (`a`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8mb4 INSERT_METHOD=LAST UNION=(`t1`,`t2`)

我转换了它:

ALTER TABLE total ADD PRIMARY KEY (a),
ENGINE=InnoDB
PARTITION BY HASH(a) PARTITIONS 4;

我必须首先确保 a 列中没有重复项。

结果表是:

CREATE TABLE `total` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`message` char(20) DEFAULT NULL,
PRIMARY KEY (`a`),
KEY `a` (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
PARTITION BY HASH (a)
PARTITIONS 4

所以它在a列上仍然有冗余索引,但除此之外它似乎已经起作用了。

请注意,这确实需要额外的存储空间。合并表定义为联合的原始表仍然存在。

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1 |
| t2 |
| total |
+----------------+

t1t2 中数据的任何进一步更改都不会成为 total 表的一部分。

关于mysql - 将分区的 MRG_MYISAM 表转换为 Innodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54824264/

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