Promuovi la partizione della tabella MySQL a tabella
Le mie capacità di ricerca su Google non erano sufficienti per trovare una soluzione a questo. Se possibile, come posso promuovere una partizione su un tavolo a un tavolo da solo?
Supponiamo che io abbia part0
, part1
, e part2
. C'è qualcuno ALTER TABLE
che posso dare che si converte part0
in una nuova tabella?
Il mio processo di pensiero era, poiché i dati sono già esistenti in un file separato su disco, il processo di creazione della tabella potrebbe essere più veloce della creazione di una nuova tabella utilizzando una SELECT
query.
Risposte
Non hai bisogno SELECT
. Questo può essere fatto con puro DDL.
Per questo esempio, supponiamo che la tabella partizionata sia la seguente:
- Banca dati
mydb
- Tavolo
mytable
- Partizioni (
part0
,part1
,part2
)
Questo può essere complicato, ma qui va bene
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;
Ciò che fa è prima creare mynewtable
senza partizioni e lo stesso schema in tutti gli altri aspetti. Quindi, scambia la mynewtable
tabella con part0
.
Se non sei sicuro di questo, corri
USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING;
ALTER TABLE mytable
EXCHANGE PARTITION p0
WITH TABLE mynewtable
WITHOUT VALIDATION
;
Esamina le righe in mynewtable
e il nuovo part0
e assicurati
mynewtable
ha i dati dall'originalepart0
- Il nuovo
part0
dovrebbe essere vuoto
Una volta che sei sicuro che la trasposizione abbia funzionato, corri
ALTER TABLE mytable DROP PARTITION p0;
Si prega di testare questo in un laboratorio o sqlfiddle. PROVACI !!!
Sì, a PARTITION
è un TABLE
. Tuttavia, sono necessari alcuni comandi speciali per trasformare una partizione in una tabella o viceversa.
Vedi "tablespace trasportabili" e FLUSH TABLES ptable FOR EXPORT; ALTER TABLE ptable DISCARD TABLESPACE; ALTER TABLE ptable IMPORT TABLESPACE. I dettagli sono diversi tra MySQL 5.6 e 5.7+.
http://mysql.rjweb.org/doc.php/partitionmaint#use_cases_for_partitioningha collegamenti ad alcuni luoghi che discutono le tecniche.