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与释放空间(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |