我在Oracle RDBMS中有一个数据集市,必须提供对条目列表的访问。 ENTRY
中的每一行都有ENTRY_ID (PK)
,ENTRY_DATE
和许多其他属性。问题是,一方面,计算每一行需要时间,因为大型表上有多个连接必须执行,许多属性使用函数进行转换;另一方面,将所有条目存储在集市中需要太多空间。
但是,据我所知,从今天开始,一年内从该集市中选出的99%的参赛作品都有ENTRY_DATE
。我可以将条目列表拆分为RECENT_ENTRIES
(仅包含过去365天的条目)和OLD_ENTRIES
,这实际上是一个视图。但这需要消费这些数据的每个人都检查两者。
有没有办法将RECENT_ENTRIES
和OLD_ENTRIES
汇总到一个视图中,以确保只要您按ENTRY_DATE
过滤结果或使用ENTRY_ID
访问数据,除非有必要,否则不会访问OLD_ENTRIES
?
答案 0 :(得分:0)
只需创建一个在UNION ALL
和RECENT_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;