插入(更新)大量数据的方式
插入的方式有很多种:
第一种:一条一条数据插入
第二种:批量插入
批量插入的时候,也要分为有序插入与无序插入
无序:
有序
性能对比:
解释原因:
①单条数据插入插一条,提交一次事务。
②批量插入可以自己规定条数进行事务提交,事务提交次数会变少。
③有序比无序好是因为索引的原因,有序数据索引定位较为方便,不需要频繁对磁盘进行读写操作。
注意事项:
1.SQL语句有长度限制,默认是1M,可以修改
2.事务需要控制大小,太大会影响执行效率。MySql有innodb_log_buffer_size配置,超过该这个值会把innodb的数据刷到硬盘中,这时,效率会有所下降。
最终优化方案:
将自动提交事务autocommit,进行插入/更新操作的时候,手动分批commit,分批条数限制100,或者200.比如一万条update,按照每100条就commit一次,1000个update总共需要100个事务,每次锁住100条数据。
如果直接全部提交事务,那么锁住数据太多,外部select进不来,大量连接等待获取行锁,影响数据库对外服务能力。