目前新版本支持普通表转分区表吗?
类似于 ALTER TABLE table PARTITION by range 这种
目前新版本支持普通表转分区表吗?
类似于 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 办法总比苦难多
TiDB 中的 ALTER TABLE
语法主要存在以下限制:
ALTER TABLE
语句中进行多个更改。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)
目前不支持
不支持,快点的可以dumpling备份恢复这个表来重新调整表结构
搞不懂tidb,用分区表是啥原因
删除数据方便,不用分区表,删除数据只能delete,慢,一次不能删除太多数据会oom,删除后磁盘空间不释放,而且会伴随删除进行空间占用会快速增长。
有分区表可以用drop 分区删除,速度很快而且能释放磁盘空间。