Mysql单sql更新操作和批sql更新操作优缺点对比

背景

和数据库打交道应该是我们程序员日常工作中最经常遇到的问题了,而其中在循环中进行sql操作也是常常遇到的常见问题,本文就来简单总结下单sql更新操作和批sql更新操作的优缺点

单sql更新操作 VS 批sql更新操作

首先看下他们的tps性能:
单sql更新操作:

1.insert into table value ()
2.update table set field=xx where id=xx

批sql更新操作:

1.insert into table values (),(),(),()
2.update table 
<trim prefix="set" suffixOverrides=",">
    <trim prefix="field1 = case " suffix=" end, ">
        <foreach collection="list" item="item">
                when id = #{item.id} then #{item.field1}
        </foreach>
    </trim>
    <trim prefix="field2 = case " suffix=" end, ">
        <foreach collection="list" item="item">
                when id = #{item.id} then #{item.field2}
        </foreach>
    </trim>
</trim>
where id in
<foreach collection="list" item="item" open="(" close=")" separator=",">
    #{item.id}
</foreach>

形如上面的就是常见的单sql更新语句和批量sql更新语句,
一般单sql更新操作的性能能达到8k的tps,而批量sql更新操作的性能和每一批的数量有关,比如每一批操作100条记录,那么批量sql的tps大约可以达到80左右.
从应用的耗时角度来对比
显然1次批量sql更新相比N次单sql更新会节约N倍的网络往返耗时,这对于节省应用的耗时有较大的帮助。
从sql执行耗时来对比
单sql更新操作很快,是一个小的事务操作,对于操作db来说很快的可以释放db连接,而对于批量更新sql来说,这是相对更耗时的sql语句,是一个大的事务,这样会导致持有的db连接需要较长时间才能释放.
从数据库Mysql来对比
对于mysql来说,自然它不喜欢批量更新sql,因为这是个大事务,我们都知道大事务会导致主从复制延迟, Undo log日志膨胀,锁占用时间过长等问题,所以站在mysql数据库的角度,它不希望遇到大的事务

彩蛋:
为什么大事务会导致主从复制延迟?–这是使用最新的Mysql5.7以上版本
在主库和从库性能一样的前提下,更新同一个sql应该时间一样啊,为什么说会导致主从复制延迟呢?其实这和我们选择的从库的同步方式有关,我们从库一般使用的Row的方式同步主库的数据,也就是主库执行一条更新语句后所有的记录变化会同步到从库,然后从库把这些记录变化应用到从库上,只是说这个效果和从库直接执行更新语句的效果是一样的,但是其实从库并不是通过执行和主库一样的sql来进行数据同步的,所以自然主库更新的记录越多,从库同步延迟就越大.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL: 优点: 1. 开源,免费使用,社区活跃,有大量的用户和开发者支持。 2. 高性能,支持多种存储引擎,可以根据不同的应用场景选择不同的引擎。 3. 支持分布式部署,可以通过主从复制、分片等方式实现高可用和高并发。 4. 支持存储过程、触发器和事件等高级特性,可以在数据库层面实现复杂的业务逻辑。 5. 支持多种编程语言的 API,易于集成到各种应用中。 缺点: 1. 不支持 ACID(原子性、一致性、隔离性、持久性)事务,只支持基本的事务。 2. 对大数据量的处理不够高效,需要较大的内存和硬盘空间。 3. 系统复杂度较高,需要较长的学习和部署时间。 SQL Server: 优点: 1. 作为商业数据库,具有更好的稳定性和安全性,适合企业级应用。 2. 支持 ACID 事务,提供高度的数据一致性和完整性。 3. 具有强大的 BI(商业智能)功能,包括报表、分析、数据挖掘等。 4. 集成了 Microsoft 的其他产品,如 Visual Studio、Azure 等。 缺点: 1. 商业软件,需要购买授权,成本较高。 2. 不支持多个操作系统,只能在 Windows 上运行。 3. 性能不如 MySQL,在高并发和大数据量的情况下可能会出现性能瓶颈。 SQLite: 优点: 1. 轻量级,文件大小只有几百 KB,可以方便地嵌入到各种应用中。 2. 具有 ACID 事务,支持 SQL92 标准,易于使用。 3. 不需要独立的服务器进程或线程,可以直接访问本地文件,省去了网络传输和服务器部署的开销。 4. 高度可移植,支持多种操作系统和编程语言。 缺点: 1. 对于高并发和大数据量的处理能力有限,不适合大型企业级应用。 2. 不支持分布式部署,无法实现高可用和负载均衡。 3. 不支持多用户并发访问,只能用户访问,不适合多用户同时读写的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值