繁体   English   中英

将已分区的MRG_MYISAM表转换为Innodb

[英]Convert partitioned MRG_MYISAM table to Innodb

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

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

还是我应该准备转储(这将占用10 Gb的磁盘,并且可能永远无法完成)

我在此页面上尝试了示例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表的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM