我们有一个包含大量数据的表(Oracle)(~400GB,大约有360亿条目)。在我们频繁的操作中,我们选择两个字段:一个是字符串(KEY),第二个是日期(ENTRYTIME)。
这是我们的表格结构:
CREATE TABLE Table1 ( " NAME" VARCHAR2(40 BYTE)不为空, " KEY" VARCHAR2(90)not null, " ENTRYTIME" TIMESTAMP(6)not null, " REF" VARCHAR2(60 BYTE)不为null, )
我的建议是按字符串使用分区,按日期使用子分区,为表格使用索引,为表格使用NOLOGGING。
详细地说,我想我们可以根据字符串的第一个字符(字段KEY)的ASCII代码范围制作4个分区。 E.g:
PARTITION p0 VALUES LESS THAN (32)
PARTITION p1 VALUES LESS THAN (64)
PARTITION p2 VALUES LESS THAN (96)
PARTITION p3 VALUES LESS THAN (maxvalue)
然后,对于每个分区,我们要创建一个2周的子分区,这意味着我们将有26个子分区/分区/年,所以总共:26 * 4 = 104个子分区/年。
目标是运行一个清除作业,每隔2周删除一个分区(最旧的)。
理论上,在我看来,当我们插入新记录时,Oracle会根据字符串和日期直接知道它的存储位置。当我们选择SELECT时,Oracle将确切地知道从哪里获取它,因为我们所有的SELECT操作都基于KEY,或者基于ENTRYTIME,或者两者都是(更快)。
您如何看待这种分区?您是否认为在perfs方面这比104只子分区更好?
如果Oracle可以毫无问题地处理这104个子分区,您认为它可以处理更多,208(每周一个子分区)吗?
此致