多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 大批量插入数据 ## 1.环境准备: ```sql CREATE TABLE `tb_user_2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(45) NOT NULL, `password` varchar(96) NOT NULL, `name` varchar(45) NOT NULL, `birthday` datetime DEFAULT NULL, `sex` char(1) DEFAULT NULL, `email` varchar(45) DEFAULT NULL, `phone` varchar(45) DEFAULT NULL, `qq` varchar(32) DEFAULT NULL, `status` varchar(32) NOT NULL COMMENT '用户状态', `create_time` datetime NOT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `unique_user_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; ``` 当使用load 命令导入数据的时候,适当的设置可以提高导入的效率。 ~~~ ./mysql --local-infile -uroot -p load data local infile '/Users/develop/Desktop/sql1.log' into table tb_user fields terminated by',' lines terminated by '\\n'; ~~~ ![](https://img.kancloud.cn/59/1e/591e607afe42694d667554336a3e9be6_2370x130.png) 对于 InnoDB 类型的表,有以下几种方式可以提高导入的效率: 1) 主键顺序插入 因为InnoDB类型的表是按照主键的顺序保存的,所以将导入的数据按照主键的顺序排列,可以有效的提高导入数据的效率。如果InnoDB表没有主键,那么系统会自动默认创建一个内部列作为主键,所以如果可以给表创建一个主键,将可以利用这点,来提高导入数据的效率。 ``` 脚本文件介绍 : sql1.log ----> 主键有序 sql2.log ----> 主键无序 ``` 插入ID顺序排列数据: ![](https://img.kancloud.cn/09/0b/090ba9222dc10ed5a247a7e515685a61_2560x138.png) 插入ID无序排列数据: ![](https://img.kancloud.cn/03/1d/031d6fcb09e54f6cbe34d9fea40ff345_2306x136.png) 2) 关闭唯一性校验 在导入数据前执行 SET UNIQUE_CHECKS=0,关闭唯一性校验,在导入结束后执行SET UNIQUE_CHECKS=1,恢复唯一性校验,可以提高导入的效率。![](https://img.kancloud.cn/c4/d6/c4d648fe9fffe6113c9bcca50121ee29_2364x290.png) 3) 手动提交事务 如果应用使用自动提交的方式,建议在导入前执行 SET AUTOCOMMIT=0,关闭自动提交,导入结束后再执行 SET AUTOCOMMIT=1,打开自动提交,也可以提高导入的效率。 ![](https://img.kancloud.cn/2b/27/2b272b2b6a1056619dd298bdc0e0a643_2364x278.png)