普通表改造成分区表,如何将原表数据快速迁移到 分区表上?
原表数据导出备份->创建新分区表->备份数据导入到新分区表->(看实际情况是否需要做rename table)
表数量在千万级,直接insert …select 快,还是导入导出快?
千万级很快的 。 写好脚本 建好索引。 insert select where 吧
原表 进行alter . 创建新表 ,跑脚本,最新数据的。 就是业务 可能写不进去数据
将 TiDB 普通表改成分区表,需要进行以下步骤:
-
创建分区表:使用
CREATE TABLE
语句创建一个新的分区表,指定分区键和分区数等信息。例如:CREATE TABLE t1 ( id INT NOT NULL, name VARCHAR(20), age INT, PRIMARY KEY (id) ) PARTITION BY RANGE (age) ( PARTITION p0 VALUES LESS THAN (18), PARTITION p1 VALUES LESS THAN (30), PARTITION p2 VALUES LESS THAN (MAXVALUE) );
这里创建了一个名为
t1
的分区表,使用RANGE
分区方式,按照age
字段进行分区,分为三个分区:p0
、p1
、p2
。 -
将数据从普通表拷贝到分区表:使用
INSERT INTO SELECT
语句将数据从普通表拷贝到新的分区表中。例如:INSERT INTO t1 (id, name, age) SELECT id, name, age FROM t0;
这里将普通表
t0
中的数据拷贝到新的分区表t1
中。 -
验证数据:使用
SELECT
语句验证新的分区表中的数据是否正确。例如:SELECT * FROM t1;
这里查询新的分区表
t1
中的所有数据。
需要注意的是,如果普通表中的数据比较大,拷贝数据的过程可能会比较耗时。此外,如果普通表中的数据已经被修改过,拷贝到分区表中的数据可能会与原来的数据不一致。因此,在进行数据拷贝之前,建议先备份普通表中的数据,以便出现问题时可以进行恢复。
千万级建议导出导入。
是不是可以按分区导入导出?
千万级建议导出导入,INSERT INTO t1 (id, name, age)
SELECT id, name, age FROM t0; 会执行不成功
千万级的表用insert into select极大可能性报oom,建议dumpling+lightning导出导入
用insert into select 进行分批操作的,速度还行
数据量大建议dumpling+lightning,用insert select可能会内存溢出,也有可能丢数
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。