从分区表中删除行 - 最好的方法

时间:2015-10-13 06:32:03

标签: oracle delete-row partition

我想从一个分区的表中删除大约100万条记录,表大小约为10-13百万,截至目前,表中只有2个分区包含7月份数据和8月份数据,我想要从7月份开始删除。如果从表格(0715)中删除一个简单的删除可以,请告诉我吗?碎片化的可能性?还是最好的出路?

谢谢

2 个答案:

答案 0 :(得分:3)

DELETE 对大型分区表的操作相当昂贵(但10M并不大)。通常,您尝试使用drop partition来避免它并以分区方式删除数据。

最简单的架构是滚动窗口,您可以通过在保留间隔后删除最旧的partitian来定义范围分区架构。

如果您需要更多控制权,可以使用 CTAS并交换方法。 而不是删除分区的大部分,而是创建它的副本

 create table TMP as
 select * from TAB  PARTITION  (ppp)
 where <predicate to filter out records to be ommited for partition ppp>

在TMP表上创建与分区表的LOCAL索引相同结构的索引。 比用分区交换临时表

ALTER TABLE TAB 
EXCHANGE PARTITION ppp WITH TABLE TMP including indexes
WITHOUT VALIDATION

注意 no fragmenatation ,相反,您可以使用它来重新组织分区数据(例如,在CTAS中使用ORDER BY或使用COMPRESS等)

答案 1 :(得分:0)

您可以删除截断给定表中的分区。如果要从分区中删除少量行,也可以执行删除操作。 Plz与分区详细信息共享您的表结构,以便这里的人们可以轻松地为您提供帮助。

相关问题