MySQL快速导出数据探索
  kIfzSxtCmOvO 2023年12月05日 30 0

概述

使用MySQL数据库时,单表数据量过大,导致每次使用Navicat右键该表导出数据或使用MySQLdump导出数据花费时间过长(几小时或几天),现探索如何将大数据表快速导出。

后续了解到:mysqldump适合迁移十万或百万级以下数据。

而:若为十万或百万级,则直接查询导出与使用mysqldump区别不大。

另:load data从文件导入比执行sql文件insert语句效率高,适合百万、千万级数据迁移。

单表数据量

MySQL快速导出数据探索_mysql

方法一:利用索引导出部分数据

根据索引最左原则,直接查询时,应直接指定第一索引,其他索引可按范围指定或直接指定皆可。

本次测试表MV_HIS_DATA1索引为mv_no和data_time,直接指定第一索引,第二索引按范围指定,测试如下:

1、查询数据

可以看到,110万条记录查询耗时1.5秒;

MySQL快速导出数据探索_导出数据_02

2、导出数据

一路下一步,可以看到,110万条数据写入文件耗时12秒;

MySQL快速导出数据探索_导出数据_03

MySQL快速导出数据探索_mysql_04

MySQL快速导出数据探索_mysql_05

3、导入数据

选择刚才导出的文件,一直“下一步”即可。

MySQL快速导出数据探索_导出数据_06

4、查询数据改良

使用嵌套查询:

select * from MV_HIS_DATA1
where mv_no IN ( select mv_no from MV where rtu_no=1 ) 
and data_time>'2020-01-01' and data_time<'2022-01-01';

MySQL快速导出数据探索_导出数据_07

方法一改良

MySQL支持直接将查询结果导出、导入数据文件的命令:into outfile和load data infile。

1、导出数据

100万条记录耗时1.76秒。

select * from MV_HIS_DATA1 
where mv_no IN ( select mv_no from MV where rtu_no=1 )
and data_time>'2020-01-01' and data_time<'2022-01-01'
into outfile 'D:/MV_HIS_DATA1_export.txt';

MySQL快速导出数据探索_导出数据_08

2、导入数据

导入100万条记录数据耗时9.4秒。

load data infile 'D:/MV_HIS_DATA1_export.txt' 
into table MV_HIS_DATA1(mv_no,data_time,mv_raw_value,mv_value);

MySQL快速导出数据探索_导出数据_09

备注

若命令执行失败,则需修改一下配置,windows修改my.ini文件,linux修改/etc/my.cnf文件,最后加一行:

secure_file_priv=''
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月05日 0

暂无评论

推荐阅读
  xaeiTka4h8LY   2024年05月17日   44   0   0 MySQLgithub
  xaeiTka4h8LY   2024年05月17日   36   0   0 MySQL数据库
kIfzSxtCmOvO