我对 Mysql/MariaDB 上的分区合并有疑问。
我的桌子看起来像这样:
PARTITION BY RANGE (TO_DAYS(`mydate`))
(
PARTITION p_first VALUES LESS THAN (TO_DAYS('2019-03-01')) ENGINE=InnoDB,
PARTITION p201903 VALUES LESS THAN (TO_DAYS('2019-04-01')) ENGINE=InnoDB,
PARTITION p201904 VALUES LESS THAN (TO_DAYS('2019-05-01')) ENGINE=InnoDB,
PARTITION p201905 VALUES LESS THAN (TO_DAYS('2019-06-01')) ENGINE=InnoDB,
PARTITION p201906 VALUES LESS THAN (TO_DAYS('2019-07-01')) ENGINE=InnoDB,
PARTITION p201907 VALUES LESS THAN (TO_DAYS('2019-08-01')) ENGINE=InnoDB,
PARTITION p201908 VALUES LESS THAN (TO_DAYS('2019-09-01')) ENGINE=InnoDB,
PARTITION p_future VALUES LESS THAN (MAXVALUE) ENGINE=InnoDB
);
分区非常大pfirst
(500M 行),分区对于获取上个月的数据很有用。
每月我们使用以下查询将最旧的分区p201903
合并pfirst
并拆分p_future
以创建新分区 ( ):p201909
ALTER TABLE mytable REORGANIZE PARTITION p_first, p201903 INTO ( PARTITION p_first VALUES LESS THAN (TO_DAYS('2019-04-01'));
和
ALTER TABLE EB_position REORGANIZE PARTITION p_future INTO ( PARTITION p201909 VALUES LESS THAN (TO_DAYS('2019-10-01')) ENGINE=InnoDB, PARTITION p_future VALUES LESS THAN (MAXVALUE) ENGINE=InnoDB );
mysql在技术上如何做到这一点?mysql 是否正在创建新的临时部分并将部分合并到其中?mysql是用其他部分填充的吗?那么,反转零件定义会更好吗?像 :
ALTER TABLE mytable REORGANIZE PARTITION p201903, p_first INTO ( PARTITION p_first VALUES LESS THAN (TO_DAYS('2019-04-01'));
感谢您的回答