10.7 预览特性: CONVERT PARTITION
如果您正在使用表分区,您可能听说过 ALTER TABLE ... EXCHANGE PARTITION ... WITH TABLE ...
命令。这个命令在 MariaDB 中已经存在很长时间了。但是如果您查阅手册(任何手册)或搜索网页,您会发现它几乎唯一的用例是将一个分区转换为一个独立的非分区表,或者将一个独立的非分区表转换为一个分区。
当时设计的用法非常不直观。要将一个分区转换为表,您需要先创建一个与该分区结构相同的空表,然后将其与该分区交换,最后再删除该空分区。就像这样
-- create an empty non-partitioned table
CREATE TABLE normal_table LIKE partitioned_table;
ALTER TABLE normal_table REMOVE PARTITIONING;
-- perform the exchange
ALTER TABLE partitioned_table EXCHANGE PARTITION part1 WITH TABLE normal_table;
-- and remove the now-empty partition
ALTER TABLE partitioned_table DROP PARTITION part1;
类似地,要将一个表转换为分区,您需要先创建一个分区,然后进行交换,最后再删除该表
-- create an empty partition
ALTER TABLE partitioned_table ADD PARTITION (PARTITION part1 VALUES LESS THAN (12345));
-- perform the exchange
ALTER TABLE partitioned_table EXCHANGE PARTITION part1 WITH TABLE normal_table;
-- and remove the now-empty table
DROP TABLE normal_table;
考虑到这是 EXCHANGE
特性的主要用途,我们认为它本可以更容易使用。出于我们对可用性的执着,我们实现了两个新的 ALTER TABLE
变体,正是为了达到这个目的。现在可以轻松地将分区转换为表,再转回来
ALTER TABLE partitioned_table CONVERT PARTITION part1 TO TABLE normal_table;
以及
ALTER TABLE partitioned_table CONVERT TABLE normal_table TO PARTITION part1 VALUES LESS THAN (12345);
此外,新命令不仅更方便,而且具备崩溃安全特性——即使您的服务器在操作过程中崩溃或被终止,它们也始终会完全完成或完全回滚。当然,对于复杂的由多个语句组成的 ALTER TABLE ... EXCHANGE ... WITH TABLE ...
序列,这是无法保证的。
如何亲自尝试 10.7 CONVERT PARTITION 预览特性?
Tarball
前往 tarball 下载页面。
容器
使用容器 quay.io/mariadb-foundation/mariadb-devel:10.7-mdev-25015-convert-partition。
欢迎提供反馈
如果您在此特性预览版中遇到任何问题,或者对设计有疑问,或者遇到未按预期工作的边缘情况,请在 MDEV 项目中通过提交 JIRA bug/特性请求的方式告知我们。欢迎您在 Zulip 上讨论此问题。