优化MySQL插入数据
表结构:6个字段,2个数值型,4个字符串型,字符型字段长度3~20个字符
数据量:1000条
MySQL版本:4.1
测试程序与MySQL服务器在同一台机器,单线程插入处理。
优化方法1:
修改表的类型
MySQL数据库表有两种类型,一种是支持事务处理,一种是不支持事务处理。MySQL在处理这两种表时,分别使用了不同类型的数据库引擎,因此数据库引擎在插入时效率不同,理论上说启用了事务功能后会比较慢。
修改方法:在创建表时,指定表类型
Create Table(
….. /*字段说明*/
) ENGINE=InnoDB
红色部分为表类型,InnoDB表示带事务,MyISAM表示不带事务功能
优化方法2:
一次插入多条数据
MySQL通过一次执行插入多条数据,可以减少插入时间,提高效率,不过一次插入多条记录的SQL语法有点特别,貌似MS SQL Server不支持这样的语法:
Insert into `table` values(data1),(data2),(data3)
虽然可以将多次插入的数据一次插入,但是一次插入的量还是有限制的:拼接出的SQL语句字符串长度不能超过1M,记录数不限。不太清楚是MySQL限制还是MySQL.Data数据库访问组件的限制造成的。
测试结果:
|
带事务 |
不带事务 |
执行1000次一次插1条记录 |
18s |
430ms |
执行1次一次插1000条记录 |
100ms |
60ms |