小编sjk*_*sjk的帖子

具有多个日期列的分区修剪

我在 Oracle 11g 数据库中有一个大表,它保存了几年的历史数据,所以我想按年对其进行分区。问题是该表有多个日期列并且它们都用于查询,所以我不能只选择一个日期列并将其用作分区键。

大多数时间日期彼此接近,所以我为每一年创建了分区,加上一个“溢出”分区,用于保存跨越年份边界的行。这是一个简化的示例:

create table t (
  start_year int,
  end_year int,
  partition_year int as (case when start_year=end_year then start_year else 0 end),
  data blob 
)
partition by range(partition_year) (
  partition poverflow values less than (1000),
  partition p2000 values less than (2001),
  partition p2001 values less than (2002),
  partition p2002 values less than (2003),
  partition p2003 values less than (2004),
  partition p2004 values less than (2005)
);
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是必须在查询中显式引用partition_year分区修剪(非常可取,因为表很大)不会生效。该表用于多个用户的即席聚合查询;没想到大家都记得这个逻辑。

这可以通过视图解决

create or replace view v as …
Run Code Online (Sandbox Code Playgroud)

schema oracle data-warehouse database-design oracle-11g-r2

5
推荐指数
1
解决办法
5482
查看次数