数码资讯
MySQL删除和更新操作对性能有影响吗
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
删除和更新操作的开销通常比插入要高,所以好的设计需要减少数据库的更新和删除操作。
3.1更新操作
数据库的更新操作会带来一系列的影响:需要更新操作日志(错误回滚);更新的变长字段(如varchar)的变化会带来数据的物理存储(记录移动);更新索引字段将导致索引重建;更新主键时会导致数据重组。这不仅会导致更新操作本身的低效率,也降低了查询的性能,因为在未来的磁芯片片生产。为了应对这种情况,有两种策略:1。减少更新次数,将多个字段的更新写入同一语句;二、避免更新。这两种策略适用于不同情况,并举例说明这两种情况。
3.1.1减少更新数量
集成存储库中有一个代码清理过程,它通过连接代码表给业务数据的自编码字段分配一个代码字段,代码清理是通过关联代码表更新业务数据表的过程。它需要连接多个代码表和更新多个自编码字段。要完成这个更新,有两种方法来更新语句:一种是编写多个SQL语句,每个语句更新一个自编码字段,另一个是在一个语句中写入所有更新:
updatetbl_income_tmp一
setbankcodeself =(
选择selfcode
从
tbl_bankinfo B
在a.bankcode = b.bankcode)
以下语句通过更新语句实现多个自编码字段更新如下:
复制代码代码如下所示:
updatetbl_income_tmp
设置代码1自编码=由相关代码的1表进行自编码,
代码2自编码=由相关代码的2表进行自编码,
…,
代码自编码=通过相关代码的n表进行自编码
使用二千万的测试数据,下表显示了两种方法的测试结果,测试结果表明,一种更新方法的性能提高了十倍,性能大大提高。
处理过程
多个更新方法非常耗时。
一种更新方法的耗时
代码清理
0:29:48
0:02:59
3.1.2避免更新
下面是一个流行的例子。这种情况经常发生,公司有员工考勤制度。为了提高查询统计的性能,一些表包含冗余信息是在原有系统的基础上建立起来的。把员工表为例,和获取数据的过程如图12所示。第一步是把员工信息在新表中,然后将更新部门名称通过现场部门ID。
图12。协会更新
一般来说,为了节省存储费用,部门名称等字段被设计成可变长度,因此在更新时,会导致磁盘数据的重组,形成影响查询性能的磁盘碎片。
为了避免这种情况,我们可以使用图13所示的方法来避免更新,该方法一步完成冗余数据表的插入,然后插入部门表获取部门名称,从而避免更新操作。
图13。避免更新
3.2删除操作
初学者可能会认为删除操作简单,可以很快完成。事实上,这是一种错误的认识,删除过程需要大量的磁盘扫描;需要记录数据库日志;和删除过程不释放磁盘空间,浪费磁盘,并为后续查询支离破碎的磁盘的数据,这样的表现是一个致命的打击。通常有两种方法来解决它:第一,重组(重组),经常做删除操作的表;二,避免缺失。
3.2.1重组
REORG操作重新排列表数据的物理顺序和零散的数据删除的自由空间。
因为删除操作不会释放磁盘空间,该表将在执行删除操作被分散,从而导致性能严重下降,这会发生很多更新操作后,如果统计信息的收集,但没有明显的性能改善,重组后的表中的数据可能会有帮助。当表格数据整理、数据的物理顺序是根据指定的索引重新排列,并在片段数据的自由空间被删除。这使得数据可以更快速的访问,从而提高了性能。
3.2.2避免删除中间表和正式表模式
中间表和正式表模式时往往需要更复杂的数据处理,数据在中间表的处理,那么满足条件的数据转移到正式的表和数据,不满足条件是放在中间的桌子上。图14表示从中间表正式的表格数据传递过程。完成数据处理后,我们需要插入旗= 1在中间表temp1到正式表的数据,并删除标志= 1在中间表的数据temp1。
图14。将中间表的数据传递到正式表
因为标志字段不是一个聚簇索引,当中间表temp1被删除,大量的碎片将在盘左,如图15所示。不仅会有这么多的磁盘碎片,但被删除的数据空间不会自动释放。结果不只会浪费磁盘空间,而且在查询性能急剧下降。
图15。操作结束后删除磁盘碎片
我们可以利用排空表命令避免删除操作。除了中间表temp1和正式表格,添加辅助临时表temp2。如果数据保留在temp1仅占10%的数据标志= 0,这种优化将显著提高性能。具体步骤如下:
1。插旗= 0 temp1数据为temp2
2。空表temp1
复制代码代码如下所示:
修改表temp1激活不记录最初的空表;
三.将数据插入到temp1 temp2
3.3如何使访问更有效
本节的大部分内容来自于这本书SQL的艺术,尽管它不局限于特定的DBMS和硬件平台,它是一本非常实用的书。
1。要连接到数据库,要做很多事情。直到处理结束,连接才断开。
2。一个SQL语句包含尽可能多的操作。图像表示:成千上万的语句在游标的帮助下不断循环,速度非常慢。交换几个语句并处理相同的数据仍然非常缓慢。
三.接近DBMS核心。尝试使用数据库带来的功能。减少自定义函数。因为更聪明的数据库优化器不知道自定义函数。
4。一个语句不连接太多表,建议上限是5。
5、关注频繁更新的列:在更新一行时,DB2将记录所有已更改的列。因此,添加频繁更新的列可以减少DB2的记录工作。
以上是mysql关于所有内容的删除和更新的表现,希望能喜欢。
3.1更新操作
数据库的更新操作会带来一系列的影响:需要更新操作日志(错误回滚);更新的变长字段(如varchar)的变化会带来数据的物理存储(记录移动);更新索引字段将导致索引重建;更新主键时会导致数据重组。这不仅会导致更新操作本身的低效率,也降低了查询的性能,因为在未来的磁芯片片生产。为了应对这种情况,有两种策略:1。减少更新次数,将多个字段的更新写入同一语句;二、避免更新。这两种策略适用于不同情况,并举例说明这两种情况。
3.1.1减少更新数量
集成存储库中有一个代码清理过程,它通过连接代码表给业务数据的自编码字段分配一个代码字段,代码清理是通过关联代码表更新业务数据表的过程。它需要连接多个代码表和更新多个自编码字段。要完成这个更新,有两种方法来更新语句:一种是编写多个SQL语句,每个语句更新一个自编码字段,另一个是在一个语句中写入所有更新:
updatetbl_income_tmp一
setbankcodeself =(
选择selfcode
从
tbl_bankinfo B
在a.bankcode = b.bankcode)
以下语句通过更新语句实现多个自编码字段更新如下:
复制代码代码如下所示:
updatetbl_income_tmp
设置代码1自编码=由相关代码的1表进行自编码,
代码2自编码=由相关代码的2表进行自编码,
…,
代码自编码=通过相关代码的n表进行自编码
使用二千万的测试数据,下表显示了两种方法的测试结果,测试结果表明,一种更新方法的性能提高了十倍,性能大大提高。
处理过程
多个更新方法非常耗时。
一种更新方法的耗时
代码清理
0:29:48
0:02:59
3.1.2避免更新
下面是一个流行的例子。这种情况经常发生,公司有员工考勤制度。为了提高查询统计的性能,一些表包含冗余信息是在原有系统的基础上建立起来的。把员工表为例,和获取数据的过程如图12所示。第一步是把员工信息在新表中,然后将更新部门名称通过现场部门ID。
图12。协会更新
一般来说,为了节省存储费用,部门名称等字段被设计成可变长度,因此在更新时,会导致磁盘数据的重组,形成影响查询性能的磁盘碎片。
为了避免这种情况,我们可以使用图13所示的方法来避免更新,该方法一步完成冗余数据表的插入,然后插入部门表获取部门名称,从而避免更新操作。
图13。避免更新
3.2删除操作
初学者可能会认为删除操作简单,可以很快完成。事实上,这是一种错误的认识,删除过程需要大量的磁盘扫描;需要记录数据库日志;和删除过程不释放磁盘空间,浪费磁盘,并为后续查询支离破碎的磁盘的数据,这样的表现是一个致命的打击。通常有两种方法来解决它:第一,重组(重组),经常做删除操作的表;二,避免缺失。
3.2.1重组
REORG操作重新排列表数据的物理顺序和零散的数据删除的自由空间。
因为删除操作不会释放磁盘空间,该表将在执行删除操作被分散,从而导致性能严重下降,这会发生很多更新操作后,如果统计信息的收集,但没有明显的性能改善,重组后的表中的数据可能会有帮助。当表格数据整理、数据的物理顺序是根据指定的索引重新排列,并在片段数据的自由空间被删除。这使得数据可以更快速的访问,从而提高了性能。
3.2.2避免删除中间表和正式表模式
中间表和正式表模式时往往需要更复杂的数据处理,数据在中间表的处理,那么满足条件的数据转移到正式的表和数据,不满足条件是放在中间的桌子上。图14表示从中间表正式的表格数据传递过程。完成数据处理后,我们需要插入旗= 1在中间表temp1到正式表的数据,并删除标志= 1在中间表的数据temp1。
图14。将中间表的数据传递到正式表
因为标志字段不是一个聚簇索引,当中间表temp1被删除,大量的碎片将在盘左,如图15所示。不仅会有这么多的磁盘碎片,但被删除的数据空间不会自动释放。结果不只会浪费磁盘空间,而且在查询性能急剧下降。
图15。操作结束后删除磁盘碎片
我们可以利用排空表命令避免删除操作。除了中间表temp1和正式表格,添加辅助临时表temp2。如果数据保留在temp1仅占10%的数据标志= 0,这种优化将显著提高性能。具体步骤如下:
1。插旗= 0 temp1数据为temp2
2。空表temp1
复制代码代码如下所示:
修改表temp1激活不记录最初的空表;
三.将数据插入到temp1 temp2
3.3如何使访问更有效
本节的大部分内容来自于这本书SQL的艺术,尽管它不局限于特定的DBMS和硬件平台,它是一本非常实用的书。
1。要连接到数据库,要做很多事情。直到处理结束,连接才断开。
2。一个SQL语句包含尽可能多的操作。图像表示:成千上万的语句在游标的帮助下不断循环,速度非常慢。交换几个语句并处理相同的数据仍然非常缓慢。
三.接近DBMS核心。尝试使用数据库带来的功能。减少自定义函数。因为更聪明的数据库优化器不知道自定义函数。
4。一个语句不连接太多表,建议上限是5。
5、关注频繁更新的列:在更新一行时,DB2将记录所有已更改的列。因此,添加频繁更新的列可以减少DB2的记录工作。
以上是mysql关于所有内容的删除和更新的表现,希望能喜欢。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。