mysql foreach 写法,多条 sql 与一条 sql 的性能消耗分析

说明

  1. @author JellyfishMIX - github / blog.jellyfishmix.com
  2. LICENSE GPL-2.0

从 mysql 客户端发送到 mysql server

  1. 比如有 100 条 sql,如果不手动开启事务把这 100 条 sql 放在同一个事务中执行,那么这 100 条 sql 会分别在 100 个隐式事务中。每个事务占用一个连接,这样就占用了 100 个连接。

  2. 虽然 mysql 客户端有连接池,但是占用大量的连接会导致连接池中连接数量不够用,连接池会创建新的连接,有性能开销。而且如果每次请求都执行 100 条 sql,qps 500 的话,100 * 500 = 50000 个事务,需要 5w 个连接,这样创建的开销是很大的。

  3. 虽然 mysql 客户端连接池可以设置最小连接数/最大连接数,不会达到 5w 个连接这么夸张的数目。但是由于事务太多,连接池中的连接数目有限,事务被放入连接池的阻塞队列等待执行,也会导致耗时增加。

基于阻塞队列纯手写实现数据库连接池 https://blog.csdn.net/u011583316/article/details/89107394

这篇文章里可以看到,mysql 客户端连接池和线程池类似,也有阻塞队列

mysql server

  1. sql 的 foreach 性能消耗,主要看执行一条 sql 还是多条 sql。
  2. 即使一条 sql,mysql server 操作存储引擎也是分多次的,每次 mysql server 调用存储引擎取出一行,然后再调用存储引擎取下一行。

image-20221014133436487

截图来自:01.基础架构:一条SQL查询…句是如何执行的?-- 《MySQL 实战 45 讲–丁奇》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JellyfishMIX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值