我有一个表(在Oracle 12c中)到目前为止有2200万条记录,每天还有10,000条记录 . 我们需要基于此表的计数,例如:
select col1, col2, count(*) cnt from my_table group by col1, col2;
此查询将返回少于30行, col1
, col2
的组合将是唯一的 .
我们的应用程序需要经常检查 CNT
值,但 CNT
的近似值足够好 . 这意味着我们可以创建物化视图并每10-20分钟刷新一次 .
物化视图是否适合此要求,还是应该为其创建常规表?
提前致谢!!!
2 回答
至少有三种不同的方法可以实现这一目标:
示例模式
创建物化视图日志和物化视图
查询重写
静默修改示例查询以使用小物化视图而不是大表 .
根据您的方法的近似程度,您还可以尝试SAMPLE子句:
根据值的数据分布,这可能会给出合理的估计 . 您可以测试您需要多少数量以获得合理的结果,但除非使用block子句,否则很少值得超过4或5: