Mysql上千万数据迁移方案
最近由于项目问题,单表数据过多(6000w+)导致查询变慢,所以进行数据表分表,那么分表就意味着数据分发迁移,千万级别数据如何更快迁移呢?
当然首先我是用的代码方式进行,分页方式查询数据,批量添加在对应的数据库表。但是随着分页数越来越大,发现查询的速度越来越慢。如下图 查询100w过后需要1分多钟,这样得话要等到猴年马月。
后面我对分页进行优化,使用子查询方式,但是到了几百万过后 依然很慢。接着我就开始在网上找更好的方案。最后采用了Mysql 自带得Load data,2000多万耗时一共用了30分钟左右(建议创建得表先不要创建索引,会影响导入速度)
导入(可以跟查询条件在tablename后):
SELECT * INTO OUTFILE '/var/lib/mysql-files/data.txt' FIELDS TERMINATED BY ',' FROM t_tablename;
导入:
LOAD DATA INFILE '/var/lib/mysql-files/data.txt' INTO TABLE t_tablename FIELDS TERMINATED BY ',';