搜索
查看: 1986|回复: 0

mysql数据导入的三种方法

[复制链接]

316

主题

473

帖子

1008

积分

vip用户

Rank: 6Rank: 6

积分
1008

注册会员活跃会员热心会员

QQ
发表于 2018-6-18 16:12:25 来自手机 | 显示全部楼层 |阅读模式
1.使用create table xx as select
 create table testtable as select distinct username,mname,college,mobno,cid from swdaydetail where sdate>='20171101' and sdate<'20171130';


2.使用MySQL的SELECT INTO OUTFILE 、Load data file

LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中。当用户一前一后地使用SELECT … INTO OUTFILE 和LOAD DATA
INFILE 将数据从一个数据库写到一个文件中,然后再从文件中将它读入数据库中时,两个命令的字段和行处理选项必须匹配。否则,LOAD DATA INFILE 将不能正确地解释文件内容。
假设用户使用SELECT … INTO OUTFILE 以逗号分隔字段的方式将数据写入到一个文件中:
 SELECT * INTO OUTFILE 'data.txt' FIELDS TERMINATED BY ',' FROM table2;  

为了将由逗号分隔的文件读回时,正确的语句应该是:
 LOAD DATA INFILE 'data.txt' INTO TABLE table2 FIELDS TERMINATED BY ','; 

如果用户试图用下面所示的语句读取文件,它将不会工作,因为命令LOAD DATA INFILE 以定位符区分字段值:

LOAD DATA INFILE 'data.txt' INTO TABLE table2 FIELDS TERMINATED BY '\t';  

下面是用来导入导出的命令:
 select * into outfile 'ddd.txt' fields terminated by ',' from dn_location;  
load data infile 'ddd.txt' into table dn_location2  FIELDS TERMINATED BY ',';  

3.使用mysqldump ,source
 mysqldump -u root -p -q -e -t  webgps4 dn_location2 > dn_location2.sql  
mysqldump -u root -p -q -e -t --single-transaction  webgps4 dn_location2 > dn_location2.sql  
source dn_location2.sql  

以上是导入导出数据的语句,该方法15分钟导出1.6亿条记录,导出的文件中平均7070条记录拼成一个insert语句,通过source进行批量插入,导入1.6亿条数据耗时将近5小时。平均速度:3200W条/h。后来尝试加上–single-transaction参数,结果影响不大。另外,若在导出时增加-w参数,表示对导出数据进行筛选,那么导入导出的速度基本不变,筛选出的数据量越大,时间越慢而已。对于其中的参数这里进行说明:
–quick,-q
该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。

–extended-insert, -e
使用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度。默认为打开状态,使用–skip-extended-insert取消选项。

–single-transaction
该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和–lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用–quick 选项。在本例子中没有起到加快速度的作用
mysqldump -uroot -p –host=localhost –all-databases –single-transaction
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表