新版的tidb支持普通表转分区表吗?

目前新版本支持普通表转分区表吗?

类似于 ALTER TABLE table PARTITION by range 这种

不支持,可参考 alter table 语法 https://docs.pingcap.com/zh/tidb/stable/sql-statement-alter-table#alter-table

需要建表的时候想好
不支持alter table
你可以先建好表 再select into 进去 rename table 办法总比苦难多

MySQL 兼容性

TiDB 中的 ALTER TABLE 语法主要存在以下限制:

  • 不支持在单个 ALTER TABLE 语句中进行多个更改。
  • 不支持主键列上 Reorg-Data 类型的变更。
  • 不支持分区表上的列类型变更。
  • 不支持生成列上的列类型变更。
  • 不支持部分数据类型(例如,部分时间类型、Bit、Set、Enum、JSON 等)的变更,因为 TiDB 中的 CAST 函数与 MySQL 的行为存在兼容性问题。
  • 不支持空间数据类型。
  • ALTER TABLE t CACHE | NOCACHE 不是 MySQL 标准语法,而是 TiDB 扩展功能,参见缓存表

我个人建议你再建立一个分区表,把数据insert进去吧。表设计要在最初定。

最新版本 7.4.0 已经支持了。

mysql> show create table t2;
+-------+------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                               |
+-------+------------------------------------------------------------------------------------------------------------+
| t2    | CREATE TABLE `t2` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+-------+------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> alter table t2 partition by range (a) (   PARTITION p0 VALUES LESS THAN (18),   PARTITION p1 VALUES LESS THAN (30),   PARTITION p2 VALUES LESS THAN (MAXVALUE) );
Query OK, 0 rows affected, 1 warning (0.50 sec)

*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
PARTITION BY RANGE (`a`)
(PARTITION `p0` VALUES LESS THAN (18),
 PARTITION `p1` VALUES LESS THAN (30),
 PARTITION `p2` VALUES LESS THAN (MAXVALUE))
1 row in set (0.00 sec)
1 个赞

目前不支持

不支持,快点的可以dumpling备份恢复这个表来重新调整表结构

搞不懂tidb,用分区表是啥原因

删除数据方便,不用分区表,删除数据只能delete,慢,一次不能删除太多数据会oom,删除后磁盘空间不释放,而且会伴随删除进行空间占用会快速增长。
有分区表可以用drop 分区删除,速度很快而且能释放磁盘空间。