10w数据插入数据库的记录(java)——批量插入优化
2022/2/23 19:23:29
本文主要是介绍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的数据刷到磁盘中,
这时,效率会有所下降。所以比较好的做法是,在数据达到这个这个值前进行事务提交。
个人记录
-
查已存在的手机号
select * from table where mobile in (‘13911139550’, ‘’) 10W -> List mobiles
Set mobileSet = HashSet(mobiles); -
收集要插入的手机号
List results = new LinkedList<>();
for (1W) {
if (!mobileSet.contains(mobile)) results.add(mobile);
} -
插入手机号 & 插入日志表:MyBatis批量操作、批量SQL语句
批量操作:MyBatis文档。
批量SQL:insert into table(col1, col2) values(),(),()
这篇关于10w数据插入数据库的记录(java)——批量插入优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现