我有一个摘要物化视图按年(char),月(char)和其他3个维度组织,然后是许多度量 . 我的数据从2013年到现在,并且持续增加 .
由于基础事实表是巨大的(每年增加100 M的500 M行),我正在考虑对表和MV进行分区,以便刷新MV中的最后12个月 .
经过多次阅读后,我应该按范围(每月)对事实表进行分区,并按月对MV进行分区,并按年分区 .
我知道分区策略对于性能至关重要,所以我要问的是有人有更好的解决方案,或者我已经解决的问题是最优的 .
谢谢!
MV分区的代码示例:
CREATE MATERIALIZED VIEW my_mv
PARTITION BY LIST (month) SUBPARTITION BY LIST (year)
( PARTITION p01 VALUES ('01')
( SUBPARTITION p_0117 VALUES ('2017')
, SUBPARTITION p_0116 VALUES ('2016')
, SUBPARTITION p_0115 VALUES ('2015')
, SUBPARTITION p_0114 VALUES ('2014')
, SUBPARTITION p_0113 VALUES ('2013')
)
, PARTITION p02 VALUES ('02')
( SUBPARTITION p_0217 VALUES ('2017')
, SUBPARTITION p_0216 VALUES ('2016')
, SUBPARTITION p_0215 VALUES ('2015')
, SUBPARTITION p_0214 VALUES ('2014')
, SUBPARTITION p_0213 VALUES ('2013')
)
...
, PARTITION p12 VALUES ('12')
( SUBPARTITION p_1217 VALUES ('2017')
, SUBPARTITION p_1216 VALUES ('2016')
, SUBPARTITION p_1215 VALUES ('2015')
, SUBPARTITION p_1214 VALUES ('2014')
, SUBPARTITION p_1213 VALUES ('2013')
)
)
AS
SELECT
...
FROM
...
;
1 回答
为什么不按月进行简单的分区?按月分区和按分区分区没有任何意义 . 丢弃旧分区是不可能的,通常维护将非常困难 .
然后为你MView:
这也可以节省您的任何分区维护 .
关于性能,它在很大程度上取决于您在其上运行的主要查询 . 在分区表上比在非分区表上具有更差的性能相当容易 . 如果您的主要查询没有选择某些日期范围,则日期分区是矛盾的(就性能而言) .