Java教程

10w数据插入数据库的记录(java)——批量插入优化

本文主要是介绍10w数据插入数据库的记录(java)——批量插入优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

MobileBook ———— 手机号|姓名|生日|备注
使用联合索引(查数据快)
1、
创建一个HashMap,其中key=“mobile”,value=bookUser
HashMap<String,Object> book = new Hash Map<>()
2、
将book中的key提取出来,放到list中
List mobiles = new ArrayList<>(book.Set())
3、
Mybatis 条件构造 in(“mobile”,list) 返回List repMobiles(数据库已存在的号码)
4、
将已存在的手机号剔除
mobiles - repMobiles = List rightMobiles
5、
根据rightMobiles集合找到相应的key对应的value
最后放到HashMap<String,Object> resultBook
6、
sql语句长度有限,分批插入数据(试出来最大可插入多少数据)
7、
实现:查2s;插入10s左右

注意:
a.SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,
通过max_allowed_packet配置可以修改,默认是1M,测试时修改为8M。

b.事务需要控制大小,事务太大可能会影响执行的效率。
MySQL有innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,
这时,效率会有所下降。所以比较好的做法是,在数据达到这个这个值前进行事务提交。

个人记录

  1. 查已存在的手机号
    select * from table where mobile in (‘13911139550’, ‘’) 10W -> List mobiles
    Set mobileSet = HashSet(mobiles);

  2. 收集要插入的手机号
    List results = new LinkedList<>();
    for (1W) {
    if (!mobileSet.contains(mobile)) results.add(mobile);
    }

  3. 插入手机号 & 插入日志表:MyBatis批量操作、批量SQL语句
    批量操作:MyBatis文档。
    批量SQL:insert into table(col1, col2) values(),(),()

这篇关于10w数据插入数据库的记录(java)——批量插入优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!