Oracle {LIST}按程序分区和{RANGE}子分区按DATE并带有间隔

问题描述 投票:1回答:1

我正在尝试确定在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,想知道这种方法是否有任何限制。

oracle plsql oracle12c partitioning database-partitioning
1个回答
0
投票

我尚未测试性能差异(我想它们可以忽略不计,但是我认为对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;
© www.soinside.com 2019 - 2024. All rights reserved.