更新业务,待更新的数据与
数据库
现存的数据条数不一定相同.注意这里是不相同,也就是说可能会有
新增
,可能是全部更新,也可能是
删除
现在的部分数据;如果待更新的数据与
数据库
现存的数据条数相同,那只会执行全部执行更新即可,不会存在多种情况.
现在对第一种问题场景进行处理,首
先
一种方法是全部
删除
现在数据,然后将待更新的记录全部进行
新增
.此种方法优点在于很不用考虑多种场景,并且执行简单;缺点在于对于数据量比
一遍表都有索引,
新增
都需要
修改
索引,所以
新增
包含了
修改
4、
删除
删除
跟
修改
类似,都需要
先
通过where找到指定数据,再
删除
,同时还要更新表的索引,所以
删除
包含了查询和
修改
,是最慢的
删除
和更新
操作
的开销往往比插入高,所以一个好的设计需要减少对
数据库
的更新和
删除
操作
。
3.1更新
操作
数据库
的更新
操作
会带来一连串的“效应”:更新
操作
需要记录日志(以便错误时回滚);更新可变长字段(如,varchar类型)会带来数据物理存储的变化(记录的移动);更新索引字段会导致索引重建;更新主键会导致数据重组等。这一切不但会造成更新
操作
本身效率低,而且由于磁片碎片的产生会造成以后查询
性能
的降低。为了应对这一情况,有两种策略:一、减少更新次数,把多个字段的更新写到同一个语句里;二、避免更新。这两种策略分别适用于不同的情况,下面将举例说明两种情况。
3.1.1减少更新次数
在整合库里有个代码清洗
今天发现一个有意思的事情,就是
删除
数据库
自增列时如:
现在在
数据库
创建一个 ID 我设置它为自增列,保存{1,2,3,4,5}五数现在
删除
2和3
数据库
里面只有三条数据,都是
新增
一条数据还是要从6开始,不可能从4因为不可能出现主键一样的情况。
但是今天我发现如果你
删除
的是最后一条数据,现在
删除
5,之后我可以设置自增下一个从5开始。
1 创建一个
数据库
设置自增id,如图我
删除
了3现在我
添加
数据还是从6开始。
2
删除
5设置下一个从5开始索引语句如下
DELETE FROM `test` WHE.
公众号回复关键词获取免费学习资料,加入前后端技术交流群和副业群。新建立的副业Q群:735764906。
数据库
的
操作
越来越成为整个应用的
性能
瓶颈,这对于Web应用尤其明显。关于
数据库
的
性能
,这并不只是DBA需要关心的,而更是后端开发需要去关注的事情。
所以本文讲解
MySQL
在各个方面的优化方向,方便后端开发人员在调优和问题排查过程中找到切入点。
本文目录如下:
服务器硬件的优化...
最近碰到一个需求,需要每天每间隔一段时间,就刷新一下报表统计订单数据,然后数据是按照天来做统计的,由于统计的是每个商家每天的订单数据,所以一天里会有很多条商家订单数据被统计进报表,所以入库逻辑应该这样设计,统计数据进报表时,
先
看下该商家的数据入库了没有,如果没有,就做数据初始化,如果当天商家的数据已经被初始化入库了,那么就只能做更新了。
如果按照常规的做法,应该是
先
统计出所有商家的订单统计集合,然后遍历这个集合,搜索这个商家在当天有没有数据入库了,如果没有,则为这个商家做初始化数据
操作
,也就是
新增
操作
,如果
之前做了一个功能,是对表的 CURD
操作
,只是有点特殊,就是在插入/更新数据的时候因为做了批量导入。所以在插入的时候需要判断是否有相同记录存在,如果有的话则更新已经存在的数据,如果没有的话插入该条数据。
我最初设计的版本是首
先
查询该条记录,如果记录存在的话则更新该记录,反之则插入一条新纪录。
在单条插入/更新的时候这样做是没有问题的,但是在批量导入的环境下由于数据量过大所以这里出现里的严重的
性能
问题。
当我进行批量插入的时候,我需要对每条插入记录都要在
数据库
中判断是否存在相同记录,这样大大拉低了