一、测试环境

1.1 硬件环境

名称 配置
操作系统 win7 64位
CPU 4核4线程 i5-4590
内存 16G
硬盘 128G SSD
MySQL Version 5.6

1.2 数据库表结构

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `sex` int(11) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `remark` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

二、插入实验

2.1 普通插入

线程数 插入量(万) 总耗时(毫秒) 平均插入速度(条/秒)
1 100 342844 2923
4 400 480112 8333
8 800 693702 11544
16 1600 1246522 12841

2.2 批量插入

批次大小: 500条

线程数 插入量(万) 总耗时(毫秒) 平均插入速度(条/秒)
1 100 42793 23364
4 400 58856 68027
8 800 109688 72939
16 1600 216542 73903

批次大小: 1000条

线程数 插入量(万) 总耗时(毫秒) 平均插入速度(条/秒)
1 100 42771 23380
4 400 55098 72595
8 800 106554 75082
16 1600 216353 73971

三、总结

本次实验主要是测试一下MySQL的插入速度到底有多快,让我们在开发过程中心理有底,测试数据库文件是存储到固态硬盘上的,所以速度肯定比在普通磁盘上快。测试主要围绕多线程插入和批量插入这两个点,从实验结果来看,我们可以得出以下两点结论:

  • 多线程插入确实是能够提高MySQL的插入速度,但是线程数超过系统核心线程数后,已经没有太大提升效果,所以建议多线程插入时,线程数保持和系统核心线程数一致。
  • MySQL批量插入能极大提高插入速度,每批次1000条插入的速度是单条插入速度的8倍左右,在大数据量插入时建议使用批量插入的方式,批次大小建议设置为1000条左右,可根据具体的业务情况调整。MySQL数据包默认大小为4M,超过该值会导致插入或更新失败,批量插入时应考虑该因素,可通过SHOW VARIABLES LIKE '%max_allowed_packet%'查看,该值可以修改。