我正在尝试确定在Oracle 12c(12.2.0.1.0)中确定分区策略的最佳方法。这个post几乎与我的要求相同。但是,我想知道在Oracle 12c(12.2.0.1.0)版本中实现的最佳方法。
这是我的问题:我们有四(4)个不同的程序,这些程序在其系统中提交账单。
每年大约提交的帐单数量如下:计划_1〜每年3M计划_2〜每年1百万Program_3〜每年50万每年Program_4〜100K
我最初的想法是创建按列表划分(程序)和按范围划分(BILL_SUBMISSION_DATE)。
我想将oracle interval功能用于SUBPARTITION,想知道这种方法是否有任何限制。
我尚未测试性能差异(我想它们可以忽略不计,但是我认为对INTERVAL
选项进行编码使查询和维护更加容易。
示例查询,使用旧式分区名称,在分区中查询2012年4月的发票,假设我为当月的发票创建了名为INV201204
的分区:
select * from MARK_INV_HDR
partition ('INV201204');
和相同的查询,使用INTERVAL
自动生成的分区:
select * from MARK_INV_HDR
where invoice_month = to_date('2012-04', 'yyyy-mm');
稍后查询的优点是我不必知道分区的命名约定。
要删除最旧的分区,一个查询和一个DDL:
select to_char(min(invoice_month), 'dd-Mon-yyyy') as min_inv_dt from MARK_INV_HDR;
MIN_INV_DT
-----------
01-Apr-2012
alter table mark_inv_hdr
drop partition for (TO_DATE('01-Apr-2012', 'dd-Mon-yyyy'))
update global indexes;