mysql infile/outfile 导入导出

来源:互联网 发布:数据库注释注入防护 编辑:程序博客网 时间:2024/06/09 05:35
第一种方式:通过SELECT 语句以及 LOAD FILE来导出导入文本文件

这种方式不会引起行锁定。

命令:
SELECT * INTO OUTFILE 'D:/sql/test.txt'FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"'FROM  test;


说明:

-- FIELDS 指定字段的参数

-- FIELDS TERMINATED BY 字段之间的分割符,默认是/t,这里改成逗号

-- ESCAPED BY 对特殊字符的转义,默认是使用右斜杠/, 这里改成双引号,这样的话一个双引号就会被转义成2个双引号了

-- LINES 指定行的参数

-- STARTING BY 行最开始附加的内容,我们不需要加,所以设置为空即可

-- TERMINATED BY 指定行结束附加的内容,我们加上换行符,这也是默认的配置

所形式的文件格式为:
64,"dddd",1,1266768001,"221.232.128.170",3006
65,"macbook",1,1266768001,"219.140.248.161",3006
说明:
1.现在是以”,”来作为分割符。
2.根据不同的数据类型,来进行了转义以及加上了引号。
进行导入


load data infile 'd:/sql/test.txt' into table testFIELDS TERMINATED BY ',' ENCLOSED BY '"'ESCAPED BY '"'  ; 


这样的话,导入数据的速度会提高三倍左右不过要注意的是它进行导出时的速度与mysqldump的方式来导出的速度没有太大的区别。
不过要注意的地方:

1. 用 load data 是较快的方法
2. 大数据量情况下, 最好是创建好表之后, 同时也要创建好相关的索引。 虽然说没有索引时导入更快, 但是数据导入完成之后再创建索引总共的耗时比事先创建好了再导入要来的多多了。
另外,如果是myisam表,则最好是导入之前先禁用表的索引,导完之后再启用;或者是一开始不创建索引,导完之后再创建,都会比导入的同时更新索引来的快很多.

mysql>ALTER TABLE tbl2 DISABLE KEYS;Query OK, 0 rows affected (0.00 sec)mysql>INSERT INTO tbl2 SELECT * FROM tbl1;Query OK, 2000000 row affected (36.30 sec)Records: 2000000  Duplicates: 0  Warnings: 0mysql>ALTER TABLE tbl2 ENABLE KEYS;Query OK, 0 rows affected (44.55 sec)

在大批量导入时先禁用索引, 在完全导入后, 再开启索引, 一次性完成重建索引的效率会相对高很多, 经过反复几次测试, 感觉后者基本能比前者快 1.2 倍左右. 这也就是 LOAD DATAL INFILE 相对较快的原因之一.



0 0
原创粉丝点击