IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mysql默认配置导致Mybatis-plus批处理性能受限 -> 正文阅读

[大数据]Mysql默认配置导致Mybatis-plus批处理性能受限

结论:

1、默认情况下,Mysql驱动在在默认情况下会无视executeBatch()语句;把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。
2、MySQL的JDBC连接的url中要加&rewriteBatchedStatements=true参数,并保证5.1.13以上版本的驱动,才能实现高性能的批量插入,另外这个选项对INSERT/UPDATE/DELETE都有效。

url: jdbc:mysql://ip地址:3306/emr?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC    #&rewriteBatchedStatements=true

测试代码及结果:

1、插入操作:
insert方法:一条一条插入20条的话需要18秒;
saveBatch方法:加参数批量插入200条记录6秒; 不加参数批量插入20条记录8秒;

2、修改操作
updateById方法:一条一条的更新200条记录花费时间190秒;
updateBatchById方法:加参数批量更新200条记录70秒; 不加参数批量更新200条记录108秒;

3、修改操作
未添加#&rewriteBatchedStatements=true参数;批量修改200条记录,用时1829ms;
添加#&rewriteBatchedStatements=true参数;批量修改200条记录,用时1645ms;

4、批量查找
1、未添加#&rewriteBatchedStatements=true参数;批量修改200条记录,用时899ms
2、添加#&rewriteBatchedStatements=true参数;批量修改200条记录,用时612ms;

@SpringBootTest
@RunWith(SpringRunner.class)
public class PaperApplicationTests {

	@Autowired
	private DiseaseMapper diseaseMapper;

	@Autowired
	private DiseaseIServiceImpl diseaseIService;

    //insert方法:一条一条插入20条的话需要18秒
	@Test
	public void contextInsert() {
		List<Disease> entityList = new ArrayList<>(1000);
		for (int i=1;i<20;i++){
			Disease disease = new Disease();
			disease.setCategory("鼻子" + i);
			disease.setInformation("鼻子发炎11");
			disease.setSearch1(0);
			entityList.add(disease);
		}
		long startTime = System.currentTimeMillis();    //获取开始时间
		for(Disease disease : entityList){
			diseaseMapper.insert(disease);
		}
		long endTime = System.currentTimeMillis();    //获取结束时间
		System.out.println("程序运行时间:" + (endTime - startTime) / 1000);    //输出程序运行时间
//		Disease disease = new Disease();
//		disease.setCategory("鼻子1");
//		disease.setInformation("鼻子发炎11");
//		disease.setSearch1(0);
//		int insert = diseaseMapper.insert(disease);
//		System.out.println(insert);
	}


	//	saveBatch方法:加参数批量插入200条记录6秒;  不加参数批量插入20条记录8秒
	@Test
	public void contextBatchInsert() {

		List<Disease> entityList = new ArrayList<>(1000);
		for (int i=1;i<200;i++){
			Disease disease = new Disease();
			disease.setCategory("鼻子" + i);
			disease.setInformation("鼻子发炎11");
			disease.setSearch1(0);
			entityList.add(disease);
		}
		long startTime = System.currentTimeMillis();    //获取开始时间
		boolean b = diseaseIService.saveBatch(entityList);
		long endTime = System.currentTimeMillis();    //获取结束时间
		System.out.println("程序运行时间:" + (endTime - startTime) / 1000);    //输出程序运行时间
	}


	//	updateBatchById方法:加参数批量更新200条记录70秒;  不加参数批量更新200条记录108秒
	@Test
	public void contextBatchUpdate() {
		List<Disease> entityList = new ArrayList<>(1000);
		for (int i=1;i<200;i++){
			Disease disease = new Disease();
			disease.setId(i);
			disease.setCategory("眼镜" + i);
			disease.setInformation("眼镜看不清");
			disease.setSearch1(0);
			entityList.add(disease);
		}
		long startTime = System.currentTimeMillis();    //获取开始时间
		boolean b = diseaseIService.updateBatchById(entityList);
		long endTime = System.currentTimeMillis();    //获取结束时间
		System.out.println("程序运行时间:" + (endTime - startTime) / 1000);    //输出程序运行时间
	}

//	updateById方法:一条一条的更新200条记录花费时间190秒
	@Test
	public void contextUpdate() {
//		List<Disease> entityList = new ArrayList<>(1000);
		long startTime = System.currentTimeMillis();    //获取开始时间
		for (int i=1;i<200;i++){
			Disease disease = new Disease();
			disease.setId(i);
			disease.setCategory("鼻子" + i);
			disease.setInformation("鼻子发言啦");
			disease.setSearch1(0);
			diseaseMapper.updateById(disease);
		}
		long endTime = System.currentTimeMillis();    //获取结束时间
		System.out.println("程序运行时间:" + (endTime - startTime) / 1000);    //输出程序运行时间
	}

	//未添加#&rewriteBatchedStatements=true参数;批量修改200条记录,用时1829ms;
	//添加#&rewriteBatchedStatements=true参数;批量修改200条记录,用时1645ms;
	@Test
	public void contextBatchDelete() {
		List<Integer> arr = new ArrayList<>(200);
		for(int i = 995; i <= 1193; i++){
			arr.add(i);
		}
		long startTime = System.currentTimeMillis();    //获取开始时间
		 diseaseMapper.deleteBatchIds(arr);
		long endTime = System.currentTimeMillis();    //获取结束时间
		System.out.println("程序运行时间:" + (endTime - startTime) + "ms");    //输出程序运行时间
	}
	
	//1、未添加#&rewriteBatchedStatements=true参数;批量修改200条记录,用时899ms
	//2、添加#&rewriteBatchedStatements=true参数;批量修改200条记录,用时612ms;
	@Test
	public void contextBatchSearch() {
		List<Integer> arr = new ArrayList<>(200);
		for(int i = 1194; i <= 1392; i++){
			arr.add(i);
		}
		long startTime = System.currentTimeMillis();    //获取开始时间
		diseaseMapper.selectBatchIds(arr);
		long endTime = System.currentTimeMillis();    //获取结束时间
		System.out.println("程序运行时间:" + (endTime - startTime) + "ms");    //输出程序运行时间
	}

}

少年的志向,不应该是房子,他们应该伏案疾书,或为心中的梦想而挥洒汗水,畅想着自己未来光明的人生,少年的梦想,也不应该是生活,他们应该想要集齐七颗龙珠,或者幻想着拥有一颗皮卡丘。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 13:06:19  更:2021-12-03 13:07:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:56:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码