Oracle-分区的渊源-更新中

前端之家收集整理的这篇文章主要介绍了Oracle-分区的渊源-更新中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

思维导图


概述

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与释放空间

原文链接:/oracle/210873.html

猜你在找的Oracle相关文章