Promuovi la partizione della tabella MySQL a tabella

Aug 17 2020

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 TABLEche posso dare che si converte part0in 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 SELECTquery.

Risposte

RolandoMySQLDBA Aug 17 2020 at 23:04

Non hai bisogno SELECT. Questo può essere fatto con puro DDL.

Per questo esempio, supponiamo che la tabella partizionata sia la seguente:

  1. Banca datimydb
  2. Tavolomytable
  3. 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 mynewtablesenza partizioni e lo stesso schema in tutti gli altri aspetti. Quindi, scambia la mynewtabletabella 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 mynewtablee il nuovo part0e assicurati

  • mynewtableha i dati dall'originalepart0
  • Il nuovo part0dovrebbe 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 !!!

RickJames Aug 17 2020 at 21:54

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.