Promouvoir la partition de table MySQL en table
Mes compétences en recherche Google n'étaient pas suffisantes pour trouver une solution à cela. Si possible, comment puis-je promouvoir une partition sur une table en table seule ?
Supposons que j'ai part0
, part1
et part2
. Y en a-t-il ALTER TABLE
que je puisse donner qui se convertit part0
en une nouvelle table ?
Mon processus de réflexion était que, puisque les données existent déjà dans un fichier séparé sur le disque, le processus de création de table peut être plus rapide que la création d'une nouvelle table à l'aide d'une SELECT
requête.
Réponses
Vous n'avez pas besoin SELECT
. Cela peut être fait avec du DDL pur.
Pour cet exemple, supposons que la table partitionnée est la suivante :
- Base de données
mydb
- Table
mytable
- Cloisons (
part0
,part1
,part2
)
Cela peut être délicat, mais c'est parti
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;
Ce que cela fait, c'est d'abord créer mynewtable
sans aucune partition et le même schéma dans tous les autres aspects. Ensuite, il échange la mynewtable
table avec part0
.
Si vous n'êtes pas sûr de cela, exécutez
USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING;
ALTER TABLE mytable
EXCHANGE PARTITION p0
WITH TABLE mynewtable
WITHOUT VALIDATION
;
Examinez les lignes dans mynewtable
et le nouveau part0
et assurez-vous
mynewtable
a les données de l'originalpart0
- Le nouveau
part0
doit être vide
Une fois que vous êtes sûr que la transposition a fonctionné, exécutez
ALTER TABLE mytable DROP PARTITION p0;
Veuillez tester cela dans un laboratoire ou sqlfiddle. ESSAIE !!!
Oui, un PARTITION
est un TABLE
. Cependant, certaines commandes spéciales sont nécessaires pour transformer une partition en table ou vice versa.
Voir "tablespaces transportables" et FLUSH TABLES ptable FOR EXPORT ; ALTER TABLE table DISCARD TABLESPACE; ALTER TABLE ptable IMPORT TABLESPACE. Les détails sont différents entre MySQL 5.6 et 5.7+.
http://mysql.rjweb.org/doc.php/partitionmaint#use_cases_for_partitioninga des liens vers quelques endroits qui discutent des techniques.