Я попробовал пример таблицы 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 |
+----------------+
Любые дальнейшие изменения данных в t1
, t2
НЕ станут частью таблицы total
.