普通表改成分区表,数据如何拷贝

普通表改造成分区表,如何将原表数据快速迁移到 分区表上?

原表数据导出备份->创建新分区表->备份数据导入到新分区表->(看实际情况是否需要做rename table)

1 个赞

表数量在千万级,直接insert …select 快,还是导入导出快?

千万级很快的 。 写好脚本 建好索引。 insert select where 吧

原表 进行alter . 创建新表 ,跑脚本,最新数据的。 就是业务 可能写不进去数据

将 TiDB 普通表改成分区表,需要进行以下步骤:

  1. 创建分区表:使用 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 字段进行分区,分为三个分区:p0p1p2

  2. 将数据从普通表拷贝到分区表:使用 INSERT INTO SELECT 语句将数据从普通表拷贝到新的分区表中。例如:

    INSERT INTO t1 (id, name, age)
    SELECT id, name, age FROM t0;
    

    这里将普通表 t0 中的数据拷贝到新的分区表 t1 中。

  3. 验证数据:使用 SELECT 语句验证新的分区表中的数据是否正确。例如:

    SELECT * FROM t1;
    

    这里查询新的分区表 t1 中的所有数据。

需要注意的是,如果普通表中的数据比较大,拷贝数据的过程可能会比较耗时。此外,如果普通表中的数据已经被修改过,拷贝到分区表中的数据可能会与原来的数据不一致。因此,在进行数据拷贝之前,建议先备份普通表中的数据,以便出现问题时可以进行恢复。

1 个赞

千万级建议导出导入。

是不是可以按分区导入导出?

千万级建议导出导入,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 天后被自动关闭。不再允许新回复。