我想转换一个分区的myisam表(MRG_MYISAM),该表(MRG_MYISAM)超过1.1亿行(大约60个分区表)到InnoDB中。
有安全的方法吗?(例如Alter表....)
或我应该准备一个转储(这将需要10次磁盘,并且可能永远不会完成)
我在此页面上尝试了示例合并表: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 |
+----------------+
t1
中数据的任何进一步更改,t2
都不会成为total
表的一部分。