qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

Mysql 批量insert 性能测试

批量执行insert时,有多种执行方式:
  1、循环单条执行,类似:
for(){
insert(sql);
}
  2、合并为一个事务执行(注:Mysql默认事务是自动提交的,需关闭事务自动提交),类似:
  事务begin
for()
{
insert(sql);
}
  事务commit
  3、采用insert...values value1,value2批量执行,类似:
  insert into table_name values (value1),(value2)...(valueN);
  下表是在单机情况下,通过java api调用mysql接口方式执行10,100,500,1000条记录insert时的性能表格
  备注:
  1 数据表大小未超过innodb_buffer_pool_size。
  2 单条记录为308个字节,max_allow_packet设置为16M。
  3 innodb_flush_log_at_trx_commit=1,单机无binlog。
  4 测试中的执行时间只是一个相对值,不同机器表现肯定不一样。
  结论:
  1、从实测情况可以知道,在3 的情况下,批量insert性能最高。
  2、java api里面的addBatch是1的情形。
  造成性能差距的可能原因:
  1和2,(1) 1在执行每一条insert时,mysql都会启动一个事务来跟踪;而2减少了mysql的事务数。
  (2) 减少了事务日志的同步次数。
  1和3,(1) 压缩了网络通信次数,(2) 减少了sql解析次数,(3) 减少了事务数和日志同步次数。
  2和3,减少了sql解析次数。

posted on 2014-02-26 11:03 顺其自然EVO 阅读(415) 评论(0)  编辑  收藏 所属分类: 数据库


只有注册用户登录后才能发表评论。


网站导航:
 
<2014年2月>
2627282930311
2345678
9101112131415
16171819202122
2324252627281
2345678

导航

统计

常用链接

留言簿(54)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜