批量写入数据

一次批量插入多少条的时候,效率会高一些呢?

结论:一次批量插入数据量为 max_allowed_packet 大小的一半性能较优

  1. my.ini里有max_allowed_packet这个参数控制通信的packet大小(mysql5.7的客户端默认是16M,服务端默认是4M)
  2. 写入是涉及到事务和锁的,还需要看插入缓存(Insert Buffer)的大小,插入缓存用来优化非聚簇索引的插入或更新操作
  3. 使用事务提升效率,进行一个INSERT操作时,MySQL内部会建立一个事务,在事务内才进行真正插入处理操作。
  4. 事务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时,效率会有所下降。
show variables like '%max_allowed_packet%';
show variables like 'innodb_buffer_pool_size';
show variables like '%innodb_log_buffer_size%';

在数据里做插入操作的时候,整体时间的分配

链接耗时 (30%)
发送query到服务器 (20%)
解析query (20%)
插入操作 (10% *词条数目)
插入index (10%* Index的数目)
关闭链接 (10%)

从这个时间来看,争取在一次连接里面写入尽可能多的数据,以此来提升插入的速度

版权

本作品采用 CC BY-NC-ND 4.0 授权,转载必须注明作者和本文链接。

上一篇:shell的一些笔记