如何使部分实现"部分实现"查看Oracle?

时间:2015-02-06 09:27:48

标签: oracle sql-view materialized-views

我在Oracle RDBMS中有一个数据集市,必须提供对条目列表的访问。 ENTRY中的每一行都有ENTRY_ID (PK)ENTRY_DATE和许多其他属性。问题是,一方面,计算每一行需要时间,因为大型表上有多个连接必须执行,许多属性使用函数进行转换;另一方面,将所有条目存储在集市中需要太多空间。

但是,据我所知,从今天开始,一年内从该集市中选出的99%的参赛作品都有ENTRY_DATE。我可以将条目列表拆分为RECENT_ENTRIES(仅包含过去365天的条目)和OLD_ENTRIES,这实际上是一个视图。但这需要消费这些数据的每个人都检查两者。

有没有办法将RECENT_ENTRIESOLD_ENTRIES汇总到一个视图中,以确保只要您按ENTRY_DATE过滤结果或使用ENTRY_ID访问数据,除非有必要,否则不会访问OLD_ENTRIES

1 个答案:

答案 0 :(得分:0)

只需创建一个在UNION ALLRECENT_ENTRIES的子查询之间执行OLD_ENTRIES的视图。

将谓词放在明确说明它们支持的日期范围的子查询上 - 这样,优化器可以跳过执行计划的那些部分。 e.g。

create view all_entries as
select * from recent_entries where entry_date >= sysdate-365
union all
select * from old_entries where entry_date < sysdate - 365;