Promover partição de tabela MySQL para tabela
Minhas habilidades de pesquisa no Google não foram suficientes para encontrar uma solução para isso. Se possível, como posso promover uma partição em uma tabela para uma tabela independente?
Vamos supor que eu tenha part0
, part1
e part2
. Existe algum ALTER TABLE
que eu possa dar que converta part0
em uma nova tabela?
Meu processo de pensamento foi, como os dados já existem em um arquivo separado no disco, o processo de criação da tabela pode ser mais rápido do que criar uma nova tabela usando uma SELECT
consulta.
Respostas
Você não precisa SELECT
. Isso pode ser feito com DDL puro.
Para este exemplo, digamos que a tabela particionada seja a seguinte:
- Base de dados
mydb
- Mesa
mytable
- Partições (
part0
,part1
,part2
)
Isso pode ser complicado, mas aqui vai
USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING;
ALTER TABLE mytable
EXCHANGE PARTITION p0
WITH TABLE mynewtable
WITHOUT VALIDATION
;
ALTER TABLE mytable DROP PARTITION p0;
O que isso faz é primeiro fazer mynewtable
sem partições e o mesmo esquema em todos os outros aspectos. Em seguida, ele troca a mynewtable
tabela por part0
.
Se você não tem certeza disso, execute
USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING;
ALTER TABLE mytable
EXCHANGE PARTITION p0
WITH TABLE mynewtable
WITHOUT VALIDATION
;
Examine as linhas dentro mynewtable
e as novas part0
e certifique-se
mynewtable
tem os dados do originalpart0
- O novo
part0
deve estar vazio
Quando tiver certeza de que a transposição funcionou, execute
ALTER TABLE mytable DROP PARTITION p0;
Por favor, teste isso em um laboratório ou sqlfiddle. DE UMA CHANCE !!!
Sim, um PARTITION
é um TABLE
. No entanto, são necessários alguns comandos especiais para transformar uma partição em uma tabela ou vice-versa.
Veja "tablespaces transportáveis" e FLUSH TABLES ptable FOR EXPORT; ALTER TABLE ptable DISCARD TABLESPACE; ALTER TABLE ptable IMPORT TABLESPACE. Os detalhes são diferentes entre o MySQL 5.6 e 5.7+.
http://mysql.rjweb.org/doc.php/partitionmaint#use_cases_for_partitioningtem links para alguns lugares que discutem as técnicas.