最近在看《 MySQL 深入浅出》这本书,里面提到了几个 InnoDB 表批量导入数据时的一些优化方案,按照书上的演示来看确实有效,但我实际测试发现,几乎没有效果,不知道是哪里出了问题。
测试数据是导入 102w 条数据,表结构、存储引擎与例子一致,MySQL 版本是 5.7.30
方法 1:导入数据前执行 SET UNIQUE_CHECKS = 0 ,关闭唯一性校验;在导入数据后执行 SET UNIQUE_CHECKS = 1 ,恢复唯一性校验,可以提高导入的效率。
书中效果:关闭前耗时 22.92s 关闭后降低为 19.92s
测试效果:关闭前耗时 26.07s 关闭后耗时:25.70s
多次测试,耗时的差异几乎都差不多,并没有书中 3 秒这么大的差异
方法 2:在导入前执行 SET AUTOCOMMIT = 0
,来关闭自动提交,导入结束后再打开自动提交,也可以提高导入效率
书中效果:关闭前耗时 22.92s 关闭后降低为 20.87s
测试效果:关闭前耗时 25.18s 关闭后耗时:25.04s
也是经过多次测试的效果,书中的例子也是 5.7 的版本。 不太清楚导致这个结果的原因是 MySQL 版本差异还是其他什么原因?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.