2009年8月26日 星期三

优化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
  
作者:Yahle
曾用网名:Dogvane
原载:http://www.cnblogs.com/yahle
版权所有。转载时必须以链接形式注明作者和原始出处。

沒有留言:

張貼留言

推到 Twitter!
推到 Plurk!
推到 Facebook!