位置: 编程技术 - 正文

MySql删除和更新操作对性能有影响吗(mysql删除和更新效率)

编辑:rootadmin

推荐整理分享MySql删除和更新操作对性能有影响吗(mysql删除和更新效率),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql更新删除语句,mysql添加,删除,更新,查询的sql语句,删除mysql5.5,mysql8.0.23删除,mysql更新删除语句,mysql删除和更新效率,mysql删除和更新效率,mysql删除和更新效率,内容如对您有帮助,希望把文章链接给更多的朋友!

删除和更新操作的开销往往比插入高,所以一个好的设计需要减少对数据库的更新和删除操作。

3.1更新操作

数据库的更新操作会带来一连串的“效应”:更新操作需要记录日志(以便错误时回滚);更新可变长字段(如,varchar类型)会带来数据物理存储的变化(记录的移动);更新索引字段会导致索引重建;更新主键会导致数据重组等。这一切不但会造成更新操作本身效率低,而且由于磁片碎片的产生会造成以后查询性能的降低。为了应对这一情况,有两种策略:一、减少更新次数,把多个字段的更新写到同一个语句里;二、避免更新。这两种策略分别适用于不同的情况,下面将举例说明两种情况。

3.1.1减少更新次数在整合库里有个代码清洗过程,就是通过连接代码表给业务数据的自编码字段赋值。代码清洗其实是通过关联代码表来更新业务数据表的一个过程,需要连接多个代码表,更新多个自编码字段。完成此更新,有两种更新语句的写法:一种是写成多个SQL语句,每个语句更新一个自编码字段;另一种写法是将所有更新写在一个语句中。更新银行代码的更新语句如下所示:

通过一个更新语句实现多个自编码字段更新的语句示意如下:

set 代码1自编码 = 通过关联代码1表得到自编码, 代码2自编码 =通过关联代码2表得到自编码, ..., 代码n自编码 =通过关联代码n表得到自编码

利用两千万的测试数据。两种方法的测试结果如下表所示。从测试结果看出,一次更新方法性能提高了十倍,大大提高了性能。

处理过程

多次更新方法耗时

一次更新方法耗时

代码清洗

0::::

3.1.2避免更新

下面举个通俗的例子,这类情况是经常遇到的。某公司有一套系统员工考勤系统,为了提高查询统计的性能,在原有系统基础上建立了一些包含冗余信息的表。以员工表为例,它获得数据的过程如图所示。第一步把员工信息放到新表中,然后连接通过字段“部门ID”连接更新“部门名称”。

图. 关联更新

一般,为了节省存储开支把部门名称这样的字段设计成可变长的。所以在对它进行更新时会造成磁盘数据的重新组织,形成磁盘碎片,影响查询性能。

MySql删除和更新操作对性能有影响吗(mysql删除和更新效率)

为了避免这样的情况发生,我们可以使用如图所示的方法避免更新。这种方法一步完成了冗余数据表的插入,再插入时连接部门表获得“部门名称”,从而避免了更新操作。

图. 避免更新

3.2删除操作

初学者可能认为删除操作很简单,可以快速完成。其实这是一个错误的理解,删除过程需要大量扫描磁盘;需要记录数据库日志;而且删除过程不释放磁盘空间,浪费磁盘,并且使磁盘上的数据支离破碎,这对后续查询的性能是一个致命的打击。通常用两种方式来应对:一、对经常做删除操作的表进行重组(reorg);二、避免删除。

3.2.1 重组

重组(reorg)操作会重新排列表数据的物理顺序,并除去碎片数据中的空闲空间。

由于删除操作不释放磁盘空间,在执行删除操作后,表会成为碎片状,这导致性能严重下降,在多次更新操作之后也会出现这种情况。若收集了统计信息,但看不出有明显的性能改进,则重组表数据可能会有帮助。重组表数据时,根据指定的索引重新安排数据的物理顺序,并除去碎片数据中的空闲空间。这使该数据可以更快速的被存取,从而改进性能。

3.2.2 避免删除——中间表和正式表模式

在数据需要比较复杂的处理的时候经常会用到中间表和正式表模式。数据在中间表中被处理,然后把满足条件的数据转移至正式表,不满足条件的数据保留在中间表中。图示意了数据从中间表转移到正式表的过程:在完成数据处理之后,需要把中间表temp1中flag = 1的数据插入到正式表,并删除中间表temp1中flag = 1的数据。

图. 从中间表向正式表转移数据

因为flag字段不是聚簇索引,所以当对中间表temp1进行删除后,会再磁盘中留下大量碎片,如图所示。不但会留下那么多的磁盘碎片,而且已删除的数据的空间也不会自动释放。结果是不但浪费磁盘空间,而且查询性能会急剧下降。

图. 删除操作后的磁盘碎片

咱们可以使用清空表的命令来避免删除操作。除了中间表temp1和正式表,添加辅助临时表temp2。如果temp1中保留的数据flag=0只占有%,这一优化将显著提升性能。具体步骤如下:

1. 将temp1中flag=0的数据,插入到temp2

2. 清空表temp1

3. 将temp2中的数据插入temp1

3.3如何使访问更高效

本小节的内容很大一部分来自《The Art of SQL》这本书,这本书里集合了数据库开发的通用经验。虽然没有局限于具体的DBMS和硬件平台,但是却是一本实践性很强的书。

1.一次连接数据库,做很多事情。直到处理完,才断开连接。2.一个SQL语句包含尽量多的操作。形象地说:几千个语句,借助游标不断循环,很慢。换成几个语句,处理同样的数据,还是很慢。换成一个语句,解决问题,最好。3.接近DBMS核心。尽量使用数据库自带的函数。减少自定义函数。因为再聪明的数据库优化器也不认识自定义函数。4.一个语句不要连接太多的表,建议的上限是5个。5.将频繁更新的列集中起来:当更新某一行时,DB2 会记录进行更改的所有列,因此将频繁更新的列放到一起可以减少 DB2 的记录工作。这只是一个有关性能的小建议,因此不应为实现它而进行重大的应用程序或数据库设计修改。

标签: mysql删除和更新效率

本文链接地址:https://www.jiuchutong.com/biancheng/347706.html 转载请保留说明!

上一篇:数据库表的创建、管理和数据操作(实验一)(数据库表的创建心得体会)

下一篇:数据库表的查询操作实践演练(实验三)(数据库表的查询学会了什么)

  • 免税合并和应税合并商誉
  • 所得税费用属于什么科目借贷方向
  • 缴纳增值税会计账务处理
  • 违约金并用
  • 网上报税超过了时间还能报吗
  • 资产负债表应付账款怎么算
  • 建筑行业进项税率一览表
  • 利息收入为什么不能在贷方
  • 没有以前年度损益调整这个科目,怎么增加?
  • 售后回购的增值税税率
  • 润滑油交消费税税率
  • 住宿费发票可以抵扣进项税吗
  • 高速公路通行费专用发票可以抵扣吗
  • 社保可以在税前扣除吗
  • 进口商品买卖的关键环节
  • 固定资产不动产和动产的区别
  • 购入设备超过多少才允许一次性扣除
  • 或有负债如何计量
  • 分支机构怎么认定和纳税?
  • 苹果mac怎么复制文件到u盘 免费软件
  • mac怎么连接蓝牙鼠标
  • linux ctrl c和ctrl z
  • 水土保持补偿费是一次性征收吗
  • 会计主管人员应该具备的基本条件
  • 工业会计做账的基本流程
  • 公司为实习生买保险列支什么科目?
  • php获取ip客户端ip地址
  • 稳岗补贴支付范围
  • 农村个体户需要报税吗
  • 深度学习第一步——Pytorch-Gpu环境配置:Win11/Win10+Cuda10.2+cuDNN8.5.0+Pytorch1.8.0(步步巨细,少走十年弯路)
  • php获取当天是星期几
  • 韦罗尼卡
  • python基本功
  • canvas软件教程
  • 无法将node项识别为
  • vue el-tabs
  • 广告系统源码
  • 机械租赁税率是多少?
  • 中小型科技企业所面临的普遍问题是资金缺乏
  • 进项税额转出加计抵减会计分录
  • 劳务派遣差额征税的账务处理实例
  • css隐藏元素的方式
  • 餐饮行业经营模式有哪些
  • 房地产老项目简易计税方法
  • 通行费抵扣进项税怎么做账
  • 资产负债表没有
  • 房地产企业取得土地的契税如何记账
  • 对公账户给别人走账
  • 现金日记账余额自动生成公式
  • 简易征收应纳税额
  • 增值税专用发票几个点
  • 现在购入不动产怎么办
  • 坏账核销在企业所得税汇算清缴的填写
  • 公司租赁办公场所,没发票怎么办
  • 暂估入库后发票来不了
  • 车辆理赔款如何入账
  • 冲减上年度多计提所得税
  • 企业应付职工薪酬增加说明什么
  • 个税基数和社保有关系吗
  • WIN10系统硬盘设置
  • explorer.exe进程出错
  • ias.exe是什么程序
  • linux使用场合
  • jsp环境变量配置的步骤
  • coocareservice.exe是病毒吗
  • win102020h2版本
  • win1020h2版本怎么更新
  • 微软状态
  • sparsomycin
  • Unsolved bug in fltk-1.1.10/src/filename_list.cxx for scandir --已解决!
  • js message事件
  • vue异步加载第三方库
  • php使用js
  • W3C Group的JavaScript1.8 新特性介绍
  • python3 with语句
  • 如何用js实现一个简单的计算器
  • js实现省份和市级联动
  • 发票 字体
  • 化妆品的消费税率为
  • 上海中考规定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设