如何快速迁移一张表的数据 到 另一张表

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
背景:普通表改为分区表
新建分区表,现需要将普通表中的数据导入到分区表中,如何快速的导入?

1.insert select 2.dumpling备份恢复

我用的是insert 。。select

是觉得这方法速度比较慢吗?

物理导出导入更快,如果是高版本还有import into (相比lightning更简单些)
insert select慢多了

可以试试batch insert,这种方式会快一些

1 个赞

https://docs.pingcap.com/zh/tidb/stable/sql-statement-batch#batch

比如batch就可以快速迁移,但是你发帖的时候没有写出你的集群版本,不知道你使用的版本有没有batch功能,无法提供有效的帮助啊

1 个赞

另外看了下仓库,貌似之后的版本支持 import into from select ,大大简化了数据迁移的复杂性 :joy:
https://github.com/pingcap/tidb/issues/49883

insert into select * from t;

前面说的那两种也不会很复杂的 :smile:

我的是5.4

那就只能借助用dumpling导出,lightning导入了。顺便一提,正常使用的话,大表也没必要分区,除非经常周期性删除大量数据。

1 个赞

CTAS很符合你说的这个场景。 试试吧。

备份恢复

还是用insert。。。select吧,大表导出,在导入,不好控制,insert …select 可以根据时间范围字段进行分批操作

最快的方案是dumpling导出,lightning并行导入

嗯嗯,数据量大,担心对线上有影响

MySQL [test]> create table t2 like t1;
Query OK, 0 rows affected (0.11 sec)

MySQL [test]> insert into t2 select * from t1;
Query OK, 524288 rows affected (17.61 sec)
Records: 524288  Duplicates: 0  Warnings: 0

速度一般,测试环境

是,这个应该是最慢的了