当前位置: 首页 > wzjs >正文

如何拥有一个自己的网站网站建设时间查询

如何拥有一个自己的网站,网站建设时间查询,未来10大暴利行业,公司网站如何做二维码一.批量新增IService为我们提供了批量新增的方法,saveBatch方法用来将一个集合中的值进行批量插入。下面我们就来探究一下它相对于普通的逐条新增效果能提升多少。首先我们来看逐条新增:private User buildUser(int i) {User user new User();user.setU…

一.批量新增

IService为我们提供了批量新增的方法,saveBatch方法用来将一个集合中的值进行批量插入。下面我们就来探究一下它相对于普通的逐条新增效果能提升多少。

首先我们来看逐条新增:

private User buildUser(int i) {User user = new User();user.setUsername("user_" + i);user.setPassword("123");user.setPhone("" + (18688190000L + i));user.setBalance(2000);user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");user.setCreateTime(LocalDateTime.now());user.setUpdateTime(user.getCreateTime());return user;
}

我们准备一段代码,该段代码用来创建一个user对象。

下面我们调用这段代码,将100000条数据加入到数据库中。

@Test
void testSaveOneByOne() {long b = System.currentTimeMillis();for (int i = 1; i <= 100000; i++) {userService.save(buildUser(i));}long e = System.currentTimeMillis();System.out.println("耗时:" + (e - b));
}

查看用时,我们发现共计用时233925ms。

为什么花费了这么长时间?因为每次执行save方法都会执行一次insert语句(insert into ... (... , ... , ...) values (? , ?, ? ,? ..., ?))。并且会访问一次数据库,每次访问数据库都是一次请求,因此会导致大量访问数据库造成性能降低。

接着再看批量新增

@Test
void testSaveBatch() {// 准备10万条数据List<User> list = new ArrayList<>(1000);long b = System.currentTimeMillis();for (int i = 1; i <= 100000; i++) {list.add(buildUser(i));// 每1000条批量插入一次if (i % 1000 == 0) {userService.saveBatch(list);list.clear();}}long e = System.currentTimeMillis();System.out.println("耗时:" + (e - b));
}

提升了将近10倍。为什么呢?因为MybatisPlus的批处理是基于PrepareStatement的预编译模式,然后批量提交,最终在数据库执行时还是会有多条insert语句,逐条插入数据。SQL类似这样:

Preparing: INSERT INTO user ( username, password, phone, info, balance, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? )
Parameters: user_1, 123, 18688190001, "", 2000, 2023-07-01, 2023-07-01
Parameters: user_2, 123, 18688190002, "", 2000, 2023-07-01, 2023-07-01
Parameters: user_3, 123, 18688190003, "", 2000, 2023-07-01, 2023-07-01

也就是说MybatisPlus减少了访问数据库请求的次数,由原来的100000次变为了100次。但是仍然是执行了多条SQL语句。有没有一种办法使其能够执行1条SQL语句就完成100000条内容的插入呢?

答案是有,我们只要能构造这样的SQL语句,就能完成。

INSERT INTO user ( username, password, phone, info, balance, create_time, update_time )
VALUES 
(user_1, 123, 18688190001, "", 2000, 2023-07-01, 2023-07-01),
(user_2, 123, 18688190002, "", 2000, 2023-07-01, 2023-07-01),
(user_3, 123, 18688190003, "", 2000, 2023-07-01, 2023-07-01),
(user_4, 123, 18688190004, "", 2000, 2023-07-01, 2023-07-01);

该怎么做呢?

MySQL的客户端连接参数中有这样的一个参数:rewriteBatchedStatements。顾名思义,就是重写批处理的statement语句。参考文档:

https://dev.mysql.com/doc/connector-j/en/connector-j-connp-props-performance-extensions.html

这个参数的默认值是false,我们需要修改连接参数,将其配置为true。修改项目中的application.yml文件,在jdbc的url后面添加参数&rewriteBatchedStatements=true:

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=truedriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: MySQL123

再次测试插入10万条数据,可以发现速度有非常明显的提升:

原理如下:

ClientPreparedStatementexecuteBatchInternal中,有判断rewriteBatchedStatements值是否为true并重写SQL的功能:

最终,SQL被重写了:

重写成了我们希望的样子,这样就能实现一次SQL执行,一次访问。


文章转载自:

http://o31j460s.xsncf.cn
http://bu9Wvrcy.xsncf.cn
http://nPC5TXjU.xsncf.cn
http://9ORiHbY7.xsncf.cn
http://kFQObTOE.xsncf.cn
http://Z5o0r4hL.xsncf.cn
http://oF5ypiWp.xsncf.cn
http://JZSThvkq.xsncf.cn
http://j60OAG60.xsncf.cn
http://cAF6jwi2.xsncf.cn
http://eD2bEYdD.xsncf.cn
http://Rc3x3vuw.xsncf.cn
http://Iy8dMV2E.xsncf.cn
http://GvTsHCIs.xsncf.cn
http://wLZHHpR6.xsncf.cn
http://ATpFC7bF.xsncf.cn
http://zWU0kzRa.xsncf.cn
http://WqFVDHFz.xsncf.cn
http://YbB5T3xL.xsncf.cn
http://zftlqDvs.xsncf.cn
http://rU3UQfVd.xsncf.cn
http://ADC9cEHU.xsncf.cn
http://TT9eP9HT.xsncf.cn
http://efPUY5zn.xsncf.cn
http://GsfMZfWB.xsncf.cn
http://FwTQRdMX.xsncf.cn
http://jWpBcBc9.xsncf.cn
http://852EOaDn.xsncf.cn
http://POl9pjQE.xsncf.cn
http://EZsaQYWJ.xsncf.cn
http://www.dtcms.com/wzjs/718111.html

相关文章:

  • 阿里云网站域名绑定无锡专业网站制作
  • 做外国网站怎么买空间内蒙古seo公司
  • 网络科技公司网站建设小程序商店助手
  • 提供设计的的网站买卖链接网
  • 做外贸无法登录国外网站怎么办做吃的网站
  • 有没有做网站的多少钱wordpress功能图
  • 自己怎么做卖东西的网站花卉网站建设策划方案
  • 今天北京感染了多少人昆明seo网站排名
  • 网站开发培训深圳wordpress参考手册
  • 手机网站图片切换特效四川监理协会建设网站
  • 在线构建网站实验室网站建设的调查报告
  • 无锡建设市场网站做网站专用素材
  • 营销型网站建设818gx可不可以免费创建网站
  • 北京企业做网站报价有什么可以做翻译的网站
  • 仿做国外产品网站出路刚做的网站搜全名查不到
  • 网站视觉分析做微信营销网站建设
  • 企业网站建设进度自己做一款app需要多少钱
  • 东莞营销网站开发做外包的网站有哪些
  • python网站开发学习做礼品建什么网站
  • nginx做网站wordpress 水印插件
  • 北京网站建设公司如何选有没有教做韩餐的网站
  • 机关网站建设软件开发做平台
  • 温州市建设小学学校网站wordpress安装指南
  • 做网站的地方信德 网站建设
  • 网站多长时间到期在线观看永久免费网站网址
  • 信誉好的昆明网站建设淮南网名
  • 学校网站建设说明网站 免费空间
  • 赤峰网站策划广东省建设安全监督站的网站
  • 网站制作专业的公司叫什么网站运营建设的培训班
  • 千元低价网站建设wordpress 支付方式