最近开发一个功能需要用到mysql命令导入sql文件。用较小的sql文件(200M以内)测试的时候发现虽然比较慢,但也还是能接受,大都能在20分钟内导入完毕。直到后边使用比较大的sql文件(3G左右)测试时出现了问题,硬生生导入了23个小时才导入完毕,这个时间肯定不能接受的。于是去查解决方式,什么增加“max-allowed-packet”参数值,修改“wait_timeout”值,修改“net_buffer_length”值等都没法解决这个问题。
后来仔细一想使用的sql文件都是navicat导出的,会不会是navicat的原因。
于是测试了使用mysqldump导出的sql文件。同样的一个数据库,navicat导出的sql文件大小为:2.8G;而mysqldump导出的sql文件却只有:1.92G。
然后使用mysqldump导出的sql文件进行导入,果然,这次只需要不到5分钟就导入完毕。
确定了原因,接下来就分析是什么导致的。
分别查看mysqldump导出的sql文件和navicat导出的sql文件之后得到了原因:mysqldump导出的sql文件中会把尽可能多的数据放到一条“insert”语句中,而navicat导出的sql文件每条“insert”语句只对应一条数据。
也就是说,如果表里有5万条数据,navicat导出的sql文件中就会有5万条“insert”语句,而mysqldump导出的sql文件中可能就只有100条“insert”语句。


1857

被折叠的 条评论
为什么被折叠?



