加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle-分区的渊源-更新中

发布时间:2020-12-12 15:27:15 所属栏目:百科 来源:网络整理
导读:思维导图 概述 delete from t where create_time to_date( '2017-01-01' , 'yyyy-mm-dd' ); 当我们看到这条语句时,会想到什么呢? 一条再简单不过的按照条件删除数据库的操作。 如果大量存在,会不会引起系统性能问题呢? 当这个表的数据足够大时,按照这样

思维导图


概述

delete from t where create_time < to_date('2017-01-01','yyyy-mm-dd');

当我们看到这条语句时,会想到什么呢? 一条再简单不过的按照条件删除数据库的操作。 如果大量存在,会不会引起系统性能问题呢?

当这个表的数据足够大时,按照这样的方式来清除数据,代价无疑是非常高昂的。

我们提出使用分区的方式来解决这个问题。比如 保留历史数据的骨折是,删除最早一个月的数据,按照这个需求,将需要删除数据的表,改为分区表。 按照每个月一个分区的方式创建分区表。

这样做的结果是,以前的delete操作就变成了下面的操作:

alter table t drop partition p_name 或者 alter table t truncate partiton p_name ;

这个操作对已一个几GB数据的分区表来讲,执行时间不超过10S。

比起使用分区来操作数据,DELETE方式操作数据的问题是显而易见的,至少存在如下两点:

  • 消耗大量的系统资源
  • 无法释放空间

DELETE与系统资源

在DELETE操作中,SQL语句首先要扫描表或者索引找到符合条件的记录,然后把他们删除,这个过程中将消耗大量的CPU资源和产生大量的I/O,同时还会产生大量的undo数据。

下面是一个简单的栗子,我们可以看出delete相对于drop或者truncate对资源的消耗情况:

这里写代码片

DELETE与释放空间

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读