Live2D

mybatis+mysql保存大量数据速度慢解决方案

保存大量数据速度慢?
先说一下背景:
微服务应用场景中,需要保存一批成千上万的坐标数据,mybatisplus+mysql作为持久化工具,数据库中有btree索引。
数据库保存慢的原因分析及解决方案:
1. 索引会增加保存的处理时间,尽量避免不必要的索引。
2. mybatisplus的保存策略默认不指定mysql的批处理操作,需要在数据源配置中加“&rewriteBatchedStatements=true”
3. sql语句优化。例:insert into 表 values(#),(#),()...
4. 对于大数据量的批处理操作应该开启事务。一般来说,插一条数据,数据库会做非常多的处理,比如建索引、存储等等,没有事务的支持,在进行批处理操作的时候,每执行一次sql,数据库就会重复的进行这些处理,如果有事务了,这些工作,他只做一次。

总结:
1. 尽量避免非必要索引的建立。
2. 数据源配置中加入 &rewriteBatchedStatements=true 例:
datasource:
url: jdbc:mysql://${zlt.datasource.ip}:3306/db_**?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
username: ${zlt.datasource.username}
password: ${zlt.datasource.password}
driver-class-name: com.mysql.cj.jdbc.Driver
3. 如果批处理的数量特别巨大,应该开启事务支持。
4. 对于大批量保存的sql语句,应该动态拼接为insert into 表 values(#),(#),()...,而不是通过循环让它一条条的插入到数据库

下课
posted @ 2022-08-08 13:04  六爻呈乾  阅读(1425)  评论(18)    收藏  举报